使用 idmax() 通过 Groupby 计算数据帧中的最大值

问题描述 投票:0回答:2

我有一个有 10 列的数据框。

我使用此代码来过滤我想要的行:基本上,修订日期小于截止日期(声明的变量)并且职位名称位于提供的列表中的行。

aggregate = df.loc[(df['RevisionDate']<= cutoff_date) & (df['JobTitle'].isin(['Production Control Clerk','Customer Service Representative III, Data Entry Operator I','Accounting Clerk II','General Clerk III','Technical Instructor']))]

然后,我需要按 WD 列(有多个列)对它们进行分组,然后按职位名称(同样,有多个列)对它们进行分组。所以我这样做了:

aggregate1 = aggregate.groupby(['WD','JobTitle'])

这会生成一个包含所需行以及所有 10 列的数据框对象。

然后,从这个较小的数据框中,我只需要提取具有最高(最大)修订号的行。

aggregate1 = aggregate.max('RevisionNumber')

但是,最后一步会生成一个数据框,但只有 3 列:WD、职位名称和修订号。我需要全部 10 列。

根据我在这里发布的其他问题,我尝试使用 idmax():

df2 = aggregate.loc[aggregate.groupby(['WD','JobTitle'])['RevisionNumber'].idmax()]

但我收到此错误:

AttributeError: 'SeriesGroupBy' object has no attribute 'idmax'

我做错了什么?

python pandas dataframe pandas-groupby aggregate
2个回答
0
投票

如果先排序,可以取每组的顶行

aggregate.sort_values(by='RevisionNumber', ascending=False).groupby(['WD','JobTitle']).head(1)

0
投票

当我使用 idmax() 时,我遇到了同样的错误。 实际函数是 idxmax(),使用这个错误就会消失。

© www.soinside.com 2019 - 2024. All rights reserved.