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

时间:2019-07-01 12:44:08

标签: python python-3.x pandas 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应该只有2个机会)。计数结果应为:

print (df2)
AACC 2
DDEE 1

因此,我可以通过将销售数量除以机会数量来获得平均会员销售量:

print (df3)
AACC 4.5 
DDEE 1

关于计算的注意事项。 AACC获得2,因为9除以2为4.5,DDEE获得1为1除以1为1。

2 个答案:

答案 0 :(得分:0)

您可以在此处使用groupby.apply来获得平均销售,因此我们不必两次进行分组方式:

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

答案 1 :(得分:0)

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