python - groupby 在有序分类列上的奇怪行为
问题描述
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'
解决方案
这不是预期的行为,这是一个错误。
源潜水显示旗帜做了两件完全不同的事情。一个简单地忽略了分组级别和名称,它只采用具有新范围索引的值。另一个显然保留了它们。
推荐阅读
- azure - 为 Azure CDN 创建服务主体失败并出现租户权限错误
- python - 熊猫在本月剩余时间的总和
- c# - 从命令行或 C# Winform 访问 Windows Mobile 设备
- javascript - Webpack script-loader vs. imports-loader?module=>false
- robotframework - Robot FW : Collections library : "Copy Dictionary" : 如何制作复合字典的浅拷贝?
- node.js - Express 静态文件夹无法正确加载
- scikit-learn - 如何预测看不见的数据?
- node.js - 如何在 Node.js 中导入带有窗口对象引用的 JS 文件?
- java - 使用自签名证书在 Solr SSL 设置中禁用主机名验证
- asp.net-mvc - 从 Microsoft 身份平台获取刷新令牌