2016-09-07 68 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)