2017-10-13 47 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