我意识到这是一个非常简单的问题,但令人愤怒的是我无法弄清楚这一点。我想按位置分组并返回每个不同位置的最大值。这很简单。但是,我找不到在结果数据框中另外包含播放器列的方法。如何创建一个包含每个位置最大分数的玩家的数据框?
给定数据帧结果:
return df[(df.Chrom+'-'+str(df.Loc)+'-'+df.WT+'-'+df.Var).map(pd.Series(rates).str[0])<df.VAF]
我可以通过以下方式返回位置和格式:
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
答案 0 :(得分:1)
使用sort_values
和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
答案 1 :(得分:1)
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