[英]Count number of unique occurrences in a dataframe
我想将销售数量除以销售机会数量,以便按机会获得平均销售额。
这是具有混合类型的示例数据框:
df = pd.DataFrame({'Opportunity':['AB122','AB122','AB123', 'AB124'],
'Quantity': [2, 3, 4, 1],
'Member': ["AACC", "AACC", "AACC", 'DDEE']})
print (df)
Opportunity Quantity Member
0 AB122 2 AACC
1 AB122 3 AACC
2 AB123 4 AACC
3 AB124 1 DDEE
我可以得到这笔交易的总和
df.pivot_table('Quantity', 'Member', aggfunc=np.sum)
但是,如果我对商机做同样的事情,我只会把商机名称粘在一起。 同样,重复机会仍然包括在内。
df.pivot_table('Opportunity','Member', aggfunc=np.sum)
相反,我需要的是机会,但只有唯一的机会(AACC应该只有两个机会)。 计数结果应为:
print (df2)
AACC 2
DDEE 1
因此,我可以通过将销售数量除以机会数量来获得平均成员销售:
print (df3)
AACC 4.5
DDEE 1
注意计算。 AACC取2等于9除以2为4.5,DDEE取1等于1除以1为1。
df.groupby('Member').apply(lambda x: x.Quantity.sum())
它将按成员列对df分组,然后将每个组的数量求和,例如:
Member Opportunity Quantity
0 AACC AB122 1
1 AACC AB122 3
2 DDDD AB123 4
3 AACC AB124 1
将产生:成员AACC 5 DDDD 4 dtype:int64
您可以在此处使用groupby.apply
来获取平均销售,因此我们不必groupby.apply
进行groupby:
df.groupby('Member').apply(lambda x: x['Quantity'].sum() / x['Opportunity'].nunique())
Member
AACC 4.5
DDEE 1.0
dtype: float64
要获取列名,请使用reset_index
:
df.groupby('Member').apply(lambda x: x['Quantity'].sum() / x['Opportunity'].nunique())\
.reset_index(name='avg sale')
Member avg sale
0 AACC 4.5
1 DDEE 1.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.