MCVE

df = pd.DataFrame({
    'Cat': ['SF', 'W', 'F', 'R64', 'SF', 'F'],
    'ID': [1, 1, 1, 2, 2, 2]
})

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

如您所见,我在Cat上定义了一个有序的分类列。要验证,请检查;
0     SF
1      W
2      F
3    R64
4     SF
5      F
Name: Cat, dtype: category
Categories (4, object): [R64 < SF < F < W]

我想找到最大类别的PER ID。进行groupby + max可行。
df.groupby('ID').Cat.max()

ID
1    W
2    F
Name: Cat, dtype: object

但是我不希望ID成为索引,所以我指定as_index=False
df.groupby('ID', as_index=False).Cat.max()

   ID Cat
0   1   W
1   2  SF

糟糕!现在,按字典顺序取最大值。谁能解释这是否是预期的行为?还是这是一个错误?

注意,对于此问题,解决方法是df.groupby('ID').Cat.max().reset_index()

笔记,
>>> pd.__version__
'0.22.0'

最佳答案

这不是预期的行为,这是一个错误。

Source diving显示该标志做了两个完全不同的事情。一个人只是简单地忽略了石斑鱼的水平和名称,它只是使用新的范围索引来获取这些值。另一个显然保留了它们。

关于python - 在有序分类列上使用groupby的行为异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50778770/

10-12 22:17