2017-10-13 5 views
2

私は、いくつかのトランザクションを持っている基本的なデータフレーム(DF)を持っていることは、製品IDと値を持っている、それは次の形式を取るので、それを固定していない、それは販売価格だと言うことができます:パンダのgroupby()を使用すると、一度に複数の機能を得ることができますか?

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') 

をそして、私が何をしたいんが、私はそれがひどくダムであると思うし、これを行うには良いか、「正しい」方法がなければなりません。何か案は?

答えて

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 
+0

どうもありがとう、しかし、はい、これは重複して質問です。多分私はもっと英語を学ばなければならないので、同じ質問の他の表現を検索することができます。 – luisfer

関連する問題