Python Pandas groupby 和分类列的最大值
Python Pandas groupby and maximum value of categorical column
我有一个 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)
可以使用扩展名。在您的列中定义排序:
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_values
、groupby
和 head
。
df.sort_values(['ID', 'Cat'], ascending=[True, False]).groupby('ID').head(1)
ID Cat
1 1 W
5 2 F
我有一个 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)
可以使用扩展名。在您的列中定义排序:
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_values
、groupby
和 head
。
df.sort_values(['ID', 'Cat'], ascending=[True, False]).groupby('ID').head(1)
ID Cat
1 1 W
5 2 F