Pandas 分组,聚合,然后 Return 不同的列
Pandas Group By, Aggregate, Then Return A Different Column
我有一个 pandas DataFrame 包含棒球守备统计数据。每行显示一名球员在其职业生涯中在给定位置出场了多少场比赛。
Player
Position
Games
Brock Holt
2B
20
Brock Holt
3B
70
Ben Zobrist
OF
100
Ben Zobrist
2B
15
我希望能够 return 每个球员一行,包含他们多年来打得最多的位置。在上面的示例中,生成的 DataFrame 将是:
Player
Position
Brock Holt
3B
Ben Zobrist
OF
我一直在尝试像这样按玩家分组并按游戏汇总
df.groupby('Player').agg({'Games':['max']})
它只提供了球员的名字和在一个位置上的最大比赛次数以及
df.groupby('Player')['Position'].agg({'Games':['max']})
哪个 return 是错误 "nested renamer is not supported."
您可以转换 max
并使用 eq
创建一个布尔掩码,其中 True 对应于每个玩家玩得最多的游戏行。然后筛选 df
:
msk = df.groupby('Player')['Games'].transform('max').eq(df['Games'])
out = df[msk].drop(columns='Games')
输出:
Player Position
1 Brock Holt 3B
2 Ben Zobrist OF
您也可以直接使用 groupby 和 max,如下所示:
df.groupby(['Player']).max()
产量:
Position Games
Player
Ben Zobrist OF 100
Brock Holt 3B 70
我有一个 pandas DataFrame 包含棒球守备统计数据。每行显示一名球员在其职业生涯中在给定位置出场了多少场比赛。
Player | Position | Games |
---|---|---|
Brock Holt | 2B | 20 |
Brock Holt | 3B | 70 |
Ben Zobrist | OF | 100 |
Ben Zobrist | 2B | 15 |
我希望能够 return 每个球员一行,包含他们多年来打得最多的位置。在上面的示例中,生成的 DataFrame 将是:
Player | Position |
---|---|
Brock Holt | 3B |
Ben Zobrist | OF |
我一直在尝试像这样按玩家分组并按游戏汇总
df.groupby('Player').agg({'Games':['max']})
它只提供了球员的名字和在一个位置上的最大比赛次数以及
df.groupby('Player')['Position'].agg({'Games':['max']})
哪个 return 是错误 "nested renamer is not supported."
您可以转换 max
并使用 eq
创建一个布尔掩码,其中 True 对应于每个玩家玩得最多的游戏行。然后筛选 df
:
msk = df.groupby('Player')['Games'].transform('max').eq(df['Games'])
out = df[msk].drop(columns='Games')
输出:
Player Position
1 Brock Holt 3B
2 Ben Zobrist OF
您也可以直接使用 groupby 和 max,如下所示:
df.groupby(['Player']).max()
产量:
Position Games
Player
Ben Zobrist OF 100
Brock Holt 3B 70