Python Pandas groupby和分类列的最大值

时间:2018-06-09 21:27:04

标签: python pandas aggregate pandas-groupby categorical-data

我有一个Pandas数据框,如下所示:

ID  Cat
1   SF
1   W
1   F
2   R64
2   SF
2   F

第一列是标识符,第二列包含分类数据,其中的顺序如下:R64 < SF < F < W

我想要一个新的数据框,其中包含每个ID的最大分类值。结果数据框应如下所示:

ID  Cat
1   W
2   F

我尝试了this thread的解决方案,但它似乎不适用于分类数据:df.groupby("ID", as_index=False).Cat.max()

这种方法的结果如下:

ID  number
1   SF
2   SF

我声明了这样的分类栏:

df['Cat'] = pd.Categorical(df['Cat'], categories = ["R64", "SF", "F", "W"], ordered = True)

1 个答案:

答案 0 :(得分:1)

可以使用扩展程序。在列中定义排序:

df.Cat = pd.Categorical(
    df.Cat, categories=['R64', 'SF', 'F', 'W'], ordered=True)

现在,groupby有效:

df.groupby('ID').Cat.max().reset_index()

   ID Cat
0   1   W
1   2   F

或者,使用sort_valuesgroupbyhead

df.sort_values(['ID', 'Cat'], ascending=[True, False]).groupby('ID').head(1)

   ID Cat
1   1   W
5   2   F