如何在按单个列分组后选择多列

2024-05-15 02:29:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找到在每个位置上得分最高的球员。在熊猫身上,什么是最好的紧凑的方法

Name            Overall Potential   Club                Position
L. Messi        94      94          FC Barcelona        RF
Ronaldo         94      94          Juventus            ST
Neymar Jr       92      93          Paris Saint-Germain LW
De Gea          91      93          Manchester United   GK
K. De Bruyne    91      92          Manchester City     RCM
E. Hazard       91      91          Chelsea             LF
L. Modrić       91      91          Real Madrid         RCM
L. Suárez       91      91          FC Barcelona        RS
Sergio Ramos    91      91          Real Madrid         RCB
J. Oblak        90      93          Atlético Madrid     GK
R. Lewandowski  90      90          FC Bayern München   ST
T. Kroos        90      90          Real Madrid         LCM

我试过:

fifa.groupby(by = ["Position"])['Overall'].max()

之后是

fifa.loc[(fifa["Position"] == "CAM") & (fifa['Overall'] == 89),:]

但由于有这么多的类别,这是一个乏味的任务


Tags: 方法namepositionderealstfc球员
3条回答

使用^{}(假设Overall列已排序):

df = df.drop_duplicates(subset=['Position'], keep='first')

print(df)
            Name  Overall  Potential                 Club Position
0       L. Messi       94         94         FC Barcelona       RF
1        Ronaldo       94         94             Juventus       ST
2      Neymar Jr       92         93  Paris Saint-Germain       LW
3         De Gea       91         93    Manchester United       GK
4   K. De Bruyne       91         92      Manchester City      RCM
5      E. Hazard       91         91              Chelsea       LF
7      L. Suárez       91         91         FC Barcelona       RS
8   Sergio Ramos       91         91          Real Madrid      RCB
11      T. Kroos       90         90          Real Madrid      LCM

你可以试试这个:

df[df["Overall"]==df["Overall"].max()]

这会有帮助的

您可以将中间结果与原始数据帧合并以获得完整的行:

pd.DataFrame(df.groupby('Position')['Overall'].max()).reset_index().merge(df,
                    on=['Position', 'Overall'])

它给出:

  Position  Overall          Name  Potential                 Club
0       GK       91        De Gea         93    Manchester United
1      LCM       90      T. Kroos         90          Real Madrid
2       LF       91     E. Hazard         91              Chelsea
3       LW       92     Neymar Jr         93  Paris Saint-Germain
4      RCB       91  Sergio Ramos         91          Real Madrid
5      RCM       91  K. De Bruyne         92      Manchester City
6      RCM       91     L. Modrić         91          Real Madrid
7       RF       94      L. Messi         94         FC Barcelona
8       RS       91     L. Suárez         91         FC Barcelona
9       ST       94       Ronaldo         94             Juventus

您可以注意RCM位置的2 ex aequo

相关问题 更多 >

    热门问题