繁体   English   中英

计算数据框中唯一出现的次数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM