我想在groupby对象上执行一些聚合。我想在不同的列上执行此操作,并且每列可能有多个聚合。
In [1]: from pandas import *
In [2]: df = DataFrame([[1, 'Alice', 100],
[2, 'Bob', -200],
[3, 'Alice', 300],
[4, 'Dennis', 400],
[5, 'Bob', -500]],
columns=['id', 'name', 'amount'])
In [3]: g = df.groupby('name')
In [4]: g.summarize({'num_ids': g.id.nunique(),
'total_amount': g.amount.sum(),
'max_amount': g.amount.max()})
我知道这不是有效的语法。我希望我很清楚我想要实现的目标。
Pandas实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
正好在docs
之外gb = g.agg({'id': pd.Series.nunique,
'amount': [np.sum, np.max]})
然后,如果您想重命名列,只需指定.columns
。
gb.columns = ['num_ids', 'total_amount', 'max_amount']