我有一个基本数据框(df),它有几个交易,它有一个产品ID和一个值,让我们说这是销售价格,这是不固定的,所以它采取以下形式:
id | product_id | sale_price
---+------------+-------------
1 | 1 | 100
2 | 1 | 100
3 | 2 | 98
4 | 3 | 22
5 | 1 | 95
| ... | ...
所以现在我想回答这些问题:每个product_id的平均值(平均值),价格变化是多少,以及每个product_id的销售量是多少。
我做的如下:
means = pd.DataFrame(df.groupby('item_id')['sale_price'].mean()).reset_index(level=0)
vars = pd.DataFrame(df.groupby('item_id')['sale_price'].var()).reset_index(level=0)
counts = pd.DataFrame(df.groupby('item_id')['sale_price'].count()).reset_index(level=0)
result = pd.merge(means, vars, on='item_id')
result = pd.merge(result, counts, on='item_id')
它做了我想要的,但我认为它非常愚蠢,并且必须有更好或“正确”的方式来做到这一点。有什么想法吗?
答案 0 :(得分:4)
使用groupby.agg
函数,可以同时传递多个聚合函数:
df.groupby('product_id')['sale_price'].agg(['mean', 'var', 'count'])
df.groupby('product_id')['sale_price'].agg(['mean', 'var', 'count']).reset_index()
# product_id mean var count
#0 1 98.333333 8.333333 3
#1 2 98.000000 NaN 1
#2 3 22.000000 NaN 1