我有一个有 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'
我做错了什么?
如果先排序,可以取每组的顶行
aggregate.sort_values(by='RevisionNumber', ascending=False).groupby(['WD','JobTitle']).head(1)
当我使用 idmax() 时,我遇到了同样的错误。 实际函数是 idxmax(),使用这个错误就会消失。