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

如何不存储为中间变量直接过滤pandas groupby聚合输出结果

可行的链式调用实现方案

你之前的代码报错是因为两个语法问题:

  1. 中括号里写'Y'.isna()是对字符串'Y'本身判断空值,不是引用Y列
  2. query语句里给Y加了单引号,会被识别为字符串而非列名

方法1:用loc+匿名函数过滤(推荐,性能更好)

直接在loc中传入匿名函数引用中间聚合结果,无需额外定义变量存储:

# 结果索引为符合条件的col1值,列N为对应N的计数
data.groupby('col1')['col2'].value_counts().unstack(level=1).loc[lambda df: df['Y'].isna(), ['N']]

# 如果需要把col1转为普通列,加reset_index即可
data.groupby('col1')['col2'].value_counts().unstack(level=1).loc[lambda df: df['Y'].isna(), ['N']].reset_index()

方法2:修正query语法实现过滤

去掉query语句中Y的引号即可生效:

data.groupby('col1')['col2'].value_counts().unstack(level=1).query("Y.isna()")[['N']].reset_index()

更轻量化的替代写法(无需unstack)

也可以直接在分组阶段判断该ID所有记录是否全为N,再统计计数:

data.groupby('col1').filter(lambda g: (g['col2'] == 'N').all()).groupby('col1').size().reset_index(name='N')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:06:01