Pandas-断言错误聚合最大值



我已经做了几个月的这一系列聚合,没有任何错误。

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')
)

最新更新