如何使用groupby创建一个包含两个关联列的新列?

时间:2018-04-06 10:41:58

标签: python pandas dataframe pandas-groupby

假设我是一名水果销售商,分别购买了3种水果,现在我想计算一下我的平均成本以及购买它的次数。

输入数据框为:

data = {
    'fruit':['apple', 'apple', 'banana', 'cherry', 'apple', 'banana'], 
    'unit_price':[10, 11.5, 5, 20, 12, 4.5], 
    'amount':[100, 200, 50, 300, 180, 90]
}
pandas.DataFrame(data)

看起来像这样:

    amount   fruit  unit_price
0     100   apple   10.0
1     200   apple   11.5
2      50  banana    5.0
3     300  cherry   20.0
4     180   apple   12.0
5      90  banana    4.5

例如,我买了苹果3次,平均成本是(100 * 10 + 200 * 11.5 + 180 * 12)/(100 + 200 + 180)= 11.375

这就是我想要的:

     fruit  avg_cost  count
0    apple     11.375      3
1    banana    4.679       2
2    cherry    20.0        1

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

使用groupby

In [23]: def my_agg(df):
    ...:     names = {'Count':df['unit_price'].count(),'avg_cost':((df['amount']*df['unit_price'])/df['amount'].mean()).mean()}
    ...:     return pd.Series(names,names.keys())

In [27]: df.groupby('fruit').apply(my_agg).reset_index()
Out[27]: 
    fruit   avg_cost  Count
0   apple  11.375000    3.0
1  banana   4.678571    2.0
2  cherry  20.000000    1.0