我试图概括我问here的问题。
mlb
数据框看起来像
Player Position Salary Year
0 Mike Witt Pitcher 1400000 1988
1 George Hendrick Outfielder 989333 1988
2 Chili Davis Outfielder 950000 1988
3 Brian Downing Designated Hitter 900000 1988
4 Bob Boone Catcher 883000 1988
5 Bob Boone Catcher 883000 1989
6 Frank Smith Catcher 993000 1988
7 Frank Smith Pitcher 1300000 1989
请注意,同一玩家可能会在不同年份多次列出。 我试图找到每个职位最高总薪水的玩家。 输出应该是这样的:
Position Player Salary
0 Pitcher Mike Witt 1400000
1 Outfielder George Hendrick 989333
2 Brian Downing Designated Hitter 900000
3 Catcher Bob Boone 1766000
我认为我需要做一些像分组,然后按玩家分组,然后为每个玩家求和并找到最大值的东西。但是我在这方面遇到了麻烦。
我做positions = mlb.groupby("Position")
后,我无法完成下一步。我认为播放器的嵌套组合是必要的,但我不知道如何继续。
答案 0 :(得分:2)
这很麻烦,但可以完成工作。
df = pd.DataFrame({'Player':['Mike Witt','George Hendrick','Chili Davis','Brian Downing','Bob Boone','Bob Boone'],
'Position':['Pitcher','Outfielder','Outfielder','Designated Hitter','Catcher','Catcher'],
'Salary':[1400000,989333, 950000,900000,883000,900000],
'Year':[1988,1988,1988,1988,1988,1988]})
gp = df.groupby(['Player','Position']).sum()['Salary'].to_frame().reset_index()
gp.sort('Salary',ascending=False).drop_duplicates('Position')
OR
gp.groupby('Position').max()
就像@dawg提到的那样,这将基本上将具有多个位置的玩家视为不同的玩家,因此他们的每个位置的工资就是这里显示的。
Player Position Salary
0 Bob Boone Catcher 1783000
4 Mike Witt Pitcher 1400000
3 George Hendrick Outfielder 989333
1 Brian Downing Designated Hitter 900000
答案 1 :(得分:0)
试试这个
import numpy as np
g = df.groupby(['Position', 'Player']).aggregate({'Salary': sum, 'Player': lambda y: np.unique(y)})
print g.max(level=['Position'])