2016-09-07 65 views
1

我使用pandas groupby+agg功能來生成漂亮的報告熊貓羣由所有功能?

aggs_dict = {'a':['mean', 'std'], 'b': 'size'} 
df.groupby('year').agg(aggs_dict) 

,我想對整個數據框使用相同的aggs_dict爲一個組,無師年,是這樣的:

df.groupall().agg(aggs_dict) 

或:

df.agg(aggs_dict) 

,但無法找到任何優雅的方式來做到這一點..請注意,在我真正的代碼aggs_dict是相當複雜的,因此是相當麻煩的事:

df.a.mean() 
df.a.std() 
df.b.size() 
.... 

我失去了簡單的東西和漂亮的?

+0

@ayhan IIUC,這是相反的 - 如果整個索引將是一個大副本,這將在這裏工作。問題是關於整個df作爲一個組,而不是每個行的聚合。 –

+0

@AmiTavory是的,我注意到你的答案後。 :) – ayhan

回答

3

阿米Tavory的答案是做一個好辦法,但萬一你想不需要創建新列和刪除它們之後,你可以做類似的解決方案:

df.groupby([True]*len(df)).agg(aggs_dict) 
+0

哇!正是我想要的(繁瑣的記法,但我習慣於熊貓:) – ihadanny

+0

好的答案!

2

你可以添加一個虛擬列:

df['dummy'] = 1 

然後GROUPBY + AGG它:

df.groupby('dummy').agg(aggs_dict) 

然後delete it時,即可大功告成。

1

你也可以使用一個函數來直接分組:

df.groupby(lambda x: True).agg(aggs_dict)