熊猫:使用附加列按组获取最大值

时间:2018-05-22 02:59:38

标签: python pandas

我意识到这是一个非常简单的问题,但令人愤怒的是我无法弄清楚这一点。我想按位置分组并返回每个不同位置的最大值。这很简单。但是,我找不到在结果数据框中另外包含播放器列的方法。如何创建一个包含每个位置最大分数的玩家的数据框?

给定数据帧结果:

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

2 个答案:

答案 0 :(得分:1)

使用sort_valuesgroupby 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