从熊猫数据框中的类别(列)中选择前n行,并对其进行计算

时间:2019-07-07 09:33:25

标签: python-3.x pandas dataframe

我是大熊猫的新手,我正在分析FIFA数据集,我需要为每个排名选择前5名球员(基于总分)。

也是

我想检查是否有一个或多个以上组的队员在场。 2.对各个组执行平均值,最大值之类的运算。

谢谢

使用此操作时,我无法检索“名称”和“工资”等​​其他列。

fifa_df.groupby('Position')['Overall'].nlargest(5).groupby('Position').head()

样本数据: enter image description here 预期结果如下:

enter image description here

我也想找到一个小组中所有在场的球员,

并尝试进行每个职位前5名球员的平均工资之类的操作。

数据集链接-fifa_dataset

2 个答案:

答案 0 :(得分:2)

fifa_df.sort_values('Overall', ascending=False).groupby('Position').head(5).sort_values(['Position', 'Overall'], ascending=False)

    Name                Position    Overall Wage
1   Cristiano Ronaldo   ST          94      €405K
10  R. Lewandowski      ST          90      €205K
23  S. Agüero           ST          89      €300K
16  H. Kane             ST          89      €205K
36  G. Bale             ST          88      €355K
517 S. Coleman          RWB         80      €97K
465 P. Kadeřábek        RWB         80      €39K
450 M. Ginter           RWB         80      €28K
652 D. Caligiuri        RWB         79      €33K
766 Pablo Maffeo        RWB         78      €24K
...

答案 1 :(得分:1)

尝试在应用中使用nlargest

res = df[['Name','Position','Overall','Wage']]
res= res.groupby(['Position'],as_index=False).apply(lambda x: x.nlargest(5, 'Overall'))
res.reset_index(inplace=True)
data.drop(['level_0','level_1'],axis=1,inplace=True)
print(data)
    Name       Position Overall Wage
0   A. Griezmann    CAM 89     €145K
1   C. Eriksen      CAM 88     €205K
2   Roberto Firmino CAM 86     €195K
3   T. Müller       CAM 86     €135K
4   M. Özil         CAM 86     €190K
5   D. Godín        CB  90     €125K
6   S. Umtiti       CB  87     €205K
7   M. Benatia      CB  86     €160K
8   N. Otamendi     CB  85     €170K
9   Naldo           CB  85     €38K
....

我希望它能解决您的问题