Reputation: 21961
How do I apply sort to a pandas groupby operation? The command below returns an error saying that 'bool' object is not callable
import pandas as pd
df.groupby('cokey').sort('A')
cokey A B
11168155 18 56
11168155 0 18
11168155 56 96
11168156 96 152
11168156 0 96
Upvotes: 16
Views: 41416
Reputation: 393963
Normally the sort is performed on the groupby keys and as you've found out you can't call sort
on a groupby object, what you could do is call apply
and pass the DataFrame.sort
function and pass the column as the kwarg param:
In [58]:
df.groupby('cokey').apply(pd.DataFrame.sort, 'A')
Out[58]:
cokey A B
cokey
11168155 1 11168155 0 18
0 11168155 18 56
2 11168155 56 96
3 11168155 96 152
Alternatively you could just sort the df prior to grouping:
df.sort('A').groupby('cokey')
Update
For version 0.17.0
and above DataFrame.sort
is now deprecated see the docs, one should now use DataFrame.sort_values
:
df.groupby('cokey').apply(pd.DataFrame.sort_values, 'A')
Adding @xgdgsc 's answer in comments to here; in case you need to set ascending flag.
df.groupby('cokey').apply(pd.DataFrame.sort_values, 'A', ascending=False)
Upvotes: 29