我有以下数据帧df,它来自一个数据集:

    Rk  Player  Pos Age Tm  G   GS  MP  FG  FGA ... FT% ORB DRB TRB AST STL BLK TOV PF  PS/G
0   1   Stephen Curry   PG  27  GSW 79  79  34.2    10.2    20.2    ... 0.908   0.9 4.6 5.4 6.7 2.1 0.2 3.3 2.0 30.1
1   2   James Harden    SG  26  HOU 82  82  38.1    8.7 19.7    ... 0.860   0.8 5.3 6.1 7.5 1.7 0.6 4.6 2.8 29.0
2   3   Kevin Durant    SF  27  OKC 72  72  35.8    9.7 19.2    ... 0.898   0.6 7.6 8.2 5.0 1.0 1.2 3.5 1.9 28.2
3   4   DeMarcus Cousins    C   25  SAC 65  65  34.6    9.2 20.5    ... 0.718   2.4 9.1 11.5    3.3 1.6 1.4 3.8 3.6 26.9
4   5   LeBron James    SF  31  CLE 76  76  35.6    9.7 18.6    ... 0.731   1.5 6.0 7.4 6.8 1.4 0.6 3.3 1.9 25.3
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
471 472 Joe Harris  SG  24  CLE 5   0   3.0 0.2 0.8 ... NaN 0.0 0.6 0.6 0.4 0.0 0.0 0.2 0.2 0.6
472 473 Bruno Caboclo   SF  20  TOR 6   1   7.2 0.2 2.0 ... NaN 0.2 0.2 0.3 0.2 0.3 0.2 0.7 0.3 0.5
473 474 Sam Dekker  SF  21  HOU 3   0   2.0 0.0 0.0 ... NaN 0.0 0.3 0.3 0.0 0.3 0.0 0.0 0.0 0.0
474 475 J.J. O'Brien    SF  23  UTA 2   0   3.0 0.0 0.5 ... NaN 0.0 0.5 0.5 0.0 0.5 0.0 0.0 0.5 0.0
475 476 Nate Robinson   PG  31  NOP 2   1   11.5    0.0 0.5 ... NaN 0.0 0.0 0.0 2.0 0.5 0.0 0.0 2.5 0.0

我需要根据球队(Tm)对DF进行分组,找到每个球队(PS/G)最好的平均得分手,忽略Tm:TOT的行.每场比赛按分数降序,按球队名称(Tm)打破平局.如果有多个得分最高的球员,列出两个,并按球员姓名升序进行排序.

我所做的工作如下:

grouped = df[df['Tm']!="TOT"].groupby('Tm')['PS/G'].max().sort_values(ascending=False)

而我得到的是:

Tm
GSW    30.1
HOU    29.0
OKC    28.2
SAC    26.9
CLE    25.3
POR    25.1
NOP    24.3
TOR    23.5
IND    23.1
BOS    22.2
NYK    21.8
LAC    21.4
SAS    21.2
CHI    20.9
CHO    20.9
MIN    20.7
BRK    20.6
PHO    20.4
WAS    19.9
UTA    19.7
DEN    19.5
MIA    19.1
DET    18.8
DAL    18.3
ORL    18.2
MIL    18.2
LAL    17.6
PHI    17.5
ATL    17.1
MEM    16.6
Name: PS/G, dtype: float64

然而,我还需要在结果中包括Player列.所以我的第一个问题是,我如何才能做到这一点?

我的第二个问题是如何包括这两个要求:

  1. 以球队名称(TM)打破平局.
  2. 如果有多个得分最高的球员,列出两个,并按球员姓名升序进行排序.

推荐答案

我终于想出了以下几点:

grouped1 = df.loc[df[df['Tm']!="TOT"].groupby(['Tm'])['PS/G'].idxmax()].sort_values(by=['PS/G', 'Player'], ascending=[0,1]).reset_index()

grouped_final = grouped1[['Tm', 'Player', 'PS/G']]

Python相关问答推荐

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

Pandas—在数据透视表中占总数的百分比

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

如何在Python中使用另一个数据框更改列值(列表)

在Python中使用if else或使用regex将二进制数据如111转换为001""

Python全局变量递归得到不同的结果

Python—为什么我的代码返回一个TypeError

如何将相同组的值添加到嵌套的Pandas Maprame的倒数第二个索引级别

简单 torch 模型测试:ModuleNotFoundError:没有名为';Ultralytics.yolo';

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

有了Gekko,可以创建子模型或将模型合并在一起吗?

函数()参数';代码';必须是代码而不是字符串

如何在基于时间的数据帧中添加计算值

Pandas ,快速从词典栏中提取信息到新栏

有什么方法可以在不对多索引DataFrame的列进行排序的情况下避免词法排序警告吗?

如何计算Pandas 中具有特定条件的行之间的天差

意外的麻木图像reshape 为网格问题

在忽略on列中的重复值的同时连接polars重命名