You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中datatable链式调用filter、groupby、sum无法得到正确结果

问题原因与解决方法
  • 第一个问题:过滤条件逻辑与R dplyr规则不完全对齐,存在优先级隐患。R代码的过滤规则是「Num为12或17 且 字母为D」,而Python中&的运算优先级高于|,你的原写法会被解析为「Num为17,或者(Num为12且字母为D)」,如果存在Num=17但Letter不为D的行,两种写法的结果会不一致。要和R逻辑完全匹配需要调整括号位置:(f.Num == 17 | f.Num == 12) & (f.Letter == 'D')
  • 第二个问题:误用了update方法。update的作用是给原数据集新增列、保留所有原始行,和dplyr的summarise功能完全不同。要实现分组汇总、每个分组仅返回一行结果的需求,直接在j参数位置定义聚合表达式即可。

正确实现代码

res = df[((f.Num == 17) | (f.Num == 12)) & (f.Letter == 'D'), :
        ][:, {'Total': sum(f.Count)}, by(f.ID)]

运行后输出结果为:

ID  Total
0   1      3
1   2      4

补充说明

仅当你需要保留所有原始行、同时给同组所有行新增汇总值的场景下才需要使用update,分组输出汇总结果的场景不需要调用该方法。

内容的提问来源于stack exchange,提问作者ViSa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:48:03