Python Pandas groupby 和分类列的最大值

标签 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)

最佳答案

可以通过扩展来实现。在您的列中定义顺序:

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

关于Python Pandas groupby 和分类列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50778694/

相关文章:

r - 如何获得数据框中每个组的 10 个最高值?

python - pytest fixture 中的 pytest-mock mock 者

python - 如何在 Celery 中检查任务状态?

python - pandas.HDFStore : How do I modify "data_columns" for an existing store? 我想向不在数据列中的列添加索引

r - 如何将重复行的值合并为一行

django - Django 中 DateTime 字段之间的聚合差异

python - 如何在 OS X 上的 Emacs 中设置 Python 解释器?

php - Python 的 pass 语句在 PHP 中的等价物是什么?

python - 仅在 PANDAS 中对某些列使用 to_numeric

python - 为什么在计算欧几里德距离时,按列计算比 Pandas 中整个 DataFrame 的计算更快