groupby.filter() 与 df.query()

groupby.filter() 与 df.query() 核心区别

1.本质定位完全不同

df.query(条件字符串)

整表行筛选:按单行字段过滤,不分组

逐行判断条件,满足就保留本行,每行独立运算,看不到同组其他数据

python 复制代码
# 单条数据score>20就留下该行,和其他行无关
res = df.query("score > 20")

适用:基于自身行字段筛选数据

groupby().filter(func)

分组筛选:先分组 → 对整组数据做条件,整组留/整组删

  1. player_id拆分成N个子DataFrame(每个玩家一组)
  2. lambda入参x=单组完整子df;len(x)>=3本组行数≥3 → 保留该组全部数据;否则整组全部剔除
  3. 返回:所有符合条件分组的原始明细数据(原样行,不聚合)
python 复制代码
# 保留出场次数>=3次的玩家所有明细,出场<3整个人所有数据全删掉
filtered = df.groupby('player_id').filter(lambda x: len(x) >= 3)

适用:**按组统计特征过滤整组数据(统计每组数量、均值、最值再筛选),注意:groupby.filter 返回原始明细行,不是聚合汇总表(不会只返回 A、C 一行统计数),这是因为链式调用 .filter 后直接变回普通 DF

**

2.关键对比表

特性 query() groupby.filter()
筛选粒度 单行 整组
能否使用同组聚合信息 ❌不能(看不到同组别的行) ✅可以(x是全组数据,可len/mean/max)
返回格式 原表子集(符合条件单行) 原表子集(符合条件的整组所有行)
书写形式 字符串表达式,简单 lambda函数,可复杂逻辑

3.实操例子区分

数据:

player_id score
p1 10
p1 20
p2 15
  • df.query("score>15"):只剩p1,20一行(单行分数达标)
  • df.groupby('player_id').filter(lambda x:len(x)>=2):只剩p1两条(p1一共2行,整组保留;p2仅1行整组删除)

4.补充常用替换

想要分组筛选不用filter:搭配merge

python 复制代码
# 先算出满足条件id,再匹配原数据
valid_id = df.groupby('player_id').size().reset_index(name='cnt').query("cnt>=3")['player_id']
res = df[df['player_id'].isin(valid_id)]
# 等价groupby.filter(lambda x:len(x)>=3)

一句话总结

  • query:挑合格的行
  • groupby.filter:挑合格的组,整组带走

三大 groupby 链式函数返回区别(必背)

  1. 聚合 .sum ()/.count ()/.size () → Series / DF(汇总统计)
  2. transform →和原表行数一致的 Series(附加统计列)
  3. filter → 原结构 DF,筛选整组数据,剔除不达标分组的全部明细
相关推荐
szephyr14 小时前
用 Python 写自动化脚本:定时任务、文件批处理、自动出报表
python·自动化·pandas·脚本·定时任务
智购科技无人售货机工厂4 天前
2026自动售货机AI智能体架构:从47个小模型到33.7亿Token的工程实践~YH
android·人工智能·驱动开发·单片机·pandas
小葱炖豆腐5 天前
python绘制excel折线图
python·excel·numpy·pandas·matplotlib
七灵微5 天前
【AI】代码实战- 基于时间序列的轴承检测1
人工智能·机器学习·ai·pandas·matplotlib
2601_966949656 天前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_966949656 天前
从轮询到策略消费:量化系统如何高效处理五档盘口数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
weixin199701080167 天前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
2601_966949659 天前
批量 K 线不只是提速:因子研究中的数据质量、复权与回测偏差
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
liliangcsdn10 天前
IC计算-前向/远期收益计算和代码示例
开发语言·python·pandas
2601_9669496510 天前
批量获取多只股票五档盘口的极简方案:QuantDash Python SDK 实战指南
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash