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/