Python Pandas:通过附加列按组获取最大值
我意识到这是一个非常简单的问题,但令人愤怒的是,我无法理解这一点。我想按位置分组,并返回每个不同位置的最大总值。这很容易。但是,我找不到在结果数据帧中还包括player列的方法。我如何创建一个数据框,其中包含每个位置得分最高的一名球员 给定数据帧结果:Python Pandas:通过附加列按组获取最大值,python,pandas,Python,Pandas,我意识到这是一个非常简单的问题,但令人愤怒的是,我无法理解这一点。我想按位置分组,并返回每个不同位置的最大总值。这很容易。但是,我找不到在结果数据帧中还包括player列的方法。我如何创建一个数据框,其中包含每个位置得分最高的一名球员 给定数据帧结果: result = pd.DataFrame([ {'position': 'Top', 'grandtotal': 36.72, 'player': 'Joe'}, {'position': 'Top', 'grandtotal': 101.1
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
我提供的数据可能不能完全代表我的“实际”数据,但我一直从这些公式中得到错误的结果。有一些奇怪的求和过程,产生了比它们应该得到的更高的值。这是如此优雅和简单。我知道熊猫有一些光滑的东西,我只是花了很多时间才找到它。非常感谢。