'pandas group by ALL functionality?

I'm using the pandas groupby+agg functionality to generate nice reports

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

I would like to use the same aggs_dict on the entire dataframe as a single group, with no division to years, something like:

df.groupall().agg(aggs_dict)

or:

df.agg(aggs_dict)

But couldn't find any elegant way to do it.. Note that in my real code aggs_dict is quite complex so it's rather cumbersome to do:

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

am I missing something simple and nice?



Solution 1:[1]

Ami Tavory's answer is a great way to do it but just in case you wanted a solution that doesn't require creating new columns and deleting them afterwards you could do something like:

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

Solution 2:[2]

You could also use a function to directly group on:

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

Solution 3:[3]

You could add a dummy column:

df['dummy'] = 1

Then groupby + agg on it:

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

and then delete it when you're done.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 bunji
Solution 2 Hervé Mignot
Solution 3 Community