很多时候我们表演的时候groupby
使用 pandas 进行操作时,我们可能希望在多个系列中应用多个函数。
groupby.agg https://pandas.pydata.org/pandas-docs/stable/generated/pandas.core.groupby.DataFrameGroupBy.agg.html似乎是执行这些分组和计算的自然方法。
然而,两者之间似乎存在差异groupby.agg
and groupby.apply
已实现,因为我无法使用agg
。元组和集合工作得很好,这对我来说意味着你只能通过聚合到不可变类型agg
. Via groupby.apply
,我可以直接将一个系列聚合到一个列表中,没有任何问题。
下面是一个完整的例子。函数 (1)、(2)、(3) 成功完成。 (4) 回来时# ValueError: Function does not reduce
.
import pandas as pd
df = pd.DataFrame([['Bob', '1/1/18', 'AType', 'blah', 'test', 'test2'],
['Bob', '1/1/18', 'AType', 'blah2', 'test', 'test3'],
['Bob', '1/1/18', 'BType', 'blah', 'test', 'test2']],
columns=['NAME', 'DATE', 'TYPE', 'VALUE A', 'VALUE B', 'VALUE C'])
def grouper(df, func):
f = {'VALUE A': lambda x: func(x), 'VALUE B': 'last', 'VALUE C': 'last'}
return df.groupby(['NAME', 'DATE', 'TYPE'])['VALUE A', 'VALUE B', 'VALUE C']\
.agg(f).reset_index()
# (1) SUCCESS
grouper(df, set)
# (2) SUCCESS
grouper(df, tuple)
# (3) SUCCESS
df.groupby(['NAME', 'DATE', 'TYPE', 'VALUE B', 'VALUE C'])['VALUE A']\
.apply(list).reset_index()
# (4) FAIL
grouper(df, list)
# AttributeError
# ValueError: Function does not reduce