使用panda的groupby()如何一次获得几个功能?

时间:2017-10-13 23:29:49

标签: python pandas

我有一个基本数据框(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')

它做了我想要的,但我认为它非常愚蠢,并且必须有更好或“正确”的方式来做到这一点。有什么想法吗?

1 个答案:

答案 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