Python Pandas:通过附加列按组获取最大值

Python Pandas:通过附加列按组获取最大值,python,pandas,Python,Pandas,我意识到这是一个非常简单的问题,但令人愤怒的是,我无法理解这一点。我想按位置分组,并返回每个不同位置的最大总值。这很容易。但是,我找不到在结果数据帧中还包括player列的方法。我如何创建一个数据框,其中包含每个位置得分最高的一名球员 给定数据帧结果: result = pd.DataFrame([ {'position': 'Top', 'grandtotal': 36.72, 'player': 'Joe'}, {'position': 'Top', 'grandtotal': 101.1

我意识到这是一个非常简单的问题,但令人愤怒的是,我无法理解这一点。我想按位置分组,并返回每个不同位置的最大总值。这很容易。但是,我找不到在结果数据帧中还包括player列的方法。我如何创建一个数据框,其中包含每个位置得分最高的一名球员

给定数据帧结果:

result = pd.DataFrame([
{'position': 'Top', 'grandtotal': 36.72, 'player': 'Joe'}, 
{'position': 'Top', 'grandtotal': 101.18, 'player': 'Bill'},
{'position': 'Middle', 'grandtotal': 33.32, 'player': 'Jim'}, 
{'position': 'Middle', 'grandtotal': 72.62, 'player': 'Him'}, 
{'position': 'Bottom', 'grandtotal': 42.61, 'player': 'Tim'}, 
{'position': 'Bottom', 'grandtotal': 83.98, 'player': 'Slim'},])
我可以通过以下方式返回职位和总计:

playerframe = result.groupby(['player', 'position']).sum().reset_index()
给我:

Top         101.18

Middle      72.62

Bottom      83.98
我只需要把得分最高的球员的名字也包括在内!看起来应该这么简单。我想:

Top         Bill    101.18

Middle      Him    72.62

Bottom      Slim    83.98

通过使用
sort_值
groupby
agg

result.sort_values('grandtotal').groupby(['position'],as_index=False).agg({'player':'last','grandtotal':'sum'})
Out[345]: 
  position  grandtotal player
0   Bottom      126.59   Slim
1   Middle      105.94    Him
2      Top      137.90   Bill
根据您的描述,如果只需要每个组的最大值行:

result.sort_values('grandtotal').drop_duplicates(['position'],keep='last')
Out[347]: 
   grandtotal player position
3       72.62    Him   Middle
5       83.98   Slim   Bottom
1      101.18   Bill      Top

loc
groupby
idxmax

df.loc[df.groupby('position')['grandtotal'].idxmax()]

   grandtotal player position
5       83.98   Slim   Bottom
3       72.62    Him   Middle
1      101.18   Bill      Top

我提供的数据可能不能完全代表我的“实际”数据,但我一直从这些公式中得到错误的结果。有一些奇怪的求和过程,产生了比它们应该得到的更高的值。这是如此优雅和简单。我知道熊猫有一些光滑的东西,我只是花了很多时间才找到它。非常感谢。