使用 idmax() 的 Groupby 数据框中的最大值
Max Value in a Data Frame with Groupby using idmax()
我有一个包含 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)
我有一个包含 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)