假设我是一名水果销售商,分别购买了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
谢谢你的帮助。
答案 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