我已经做了几个月的这一系列聚合,没有任何错误。
goals = df.groupby('name').sum()['G']
assists = df.groupby('name').sum()['A']
shots_post = df.groupby('name').sum()['FT']
shots_saved = df.groupby('name').sum()['FD']
shots_off = df.groupby('name').sum()['FF']
home = df.groupby('name')['home_dummy'].agg(lambda x : x.mode().iloc[0])
position = df.groupby('name')['position'].agg(lambda x : x.mode().iloc[0])
team = df.groupby('name')['club'].agg(lambda x : x.mode().iloc[0])
games = df.groupby('name').max()['games_num']
现在,由于根本没有pandas
升级/降级,最后一行(也是只有这一行(:
games = df.groupby('name').max()['games_num']
突然开始崩溃,抛出以下错误:
games = df.groupby('name').max()['games_num']
packages/pandas/core/groupby/generic.py", line 1100, in _cython_agg_blocks
assert len(locs) == result.shape[1]
AssertionError
可能发生了什么?有没有其他方法可以使用上面的代码对游戏进行分组?
我认为问题应该是某些列不是数字,解决方案是在groupby
:之后指定的列
games = df.groupby('name')['games_num'].max()
另一个想法是将列转换为数字:
df['games_num'] = pd.to_numeric)df['games_num'], errors='coerce')
games = df.groupby('name')['games_num'].max()
相反,这里的所有groupby都应该可以使用GroupBy.agg
:的名称聚合
f = lambda x : x.mode().iloc[0]
df1 = df.groupby('name').agg(goals=('G','sum'),
assists=('A', 'sum'),
shots_post=('FT', 'sum'),
shots_saved=('FD', 'sum'),
shots_off=('FF', 'sum'),
home=('home_dummy', f),
position=('position', f),
team=('club', f),
games=('games_num', 'max')
)