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

Pandas中如何基于多条件对DataFrame分组并过滤目标分组

Pandas按分组多条件过滤实现方法

你原有写法的核心问题不是不支持多条件,是条件构造逻辑有误,扩展多列条件只需要先组合逐行的多条件布尔判断,再做分组transform即可。

实现逻辑

你要实现的是:筛选出所有**组内存在任意一行同时满足product_id=23546且purchase_value=50**的order_id分组下的全部行,对应步骤如下:

  • 先构造逐行的多条件匹配布尔掩码
  • 按order_id分组,判断每个分组是否存在匹配行,将结果广播到原表每一行
  • 用最终的布尔掩码过滤原表

代码实现

# 构造多列联合匹配条件
match_condition = (df["product_id"] == 23546) & (df["purchase_value"] == 50)
# 分组判断组内是否存在匹配项,生成过滤掩码
filter_mask = match_condition.groupby(df["order_id"]).transform("any")
# 过滤得到结果
df_filtered = df[filter_mask]

示例运行效果

用你提供的测试数据运行后,会保留order_id=1234的全部两行数据,过滤掉无匹配项的order_id=5678分组,结果如下:

order_id  product_id  purchase_value
0      1234     23546.0              50
1      1234     23546.0              20

如果你不需要保留对应订单的全部行,只需要提取符合product_id=23546且purchase_value=50的行,不需要分组操作,直接用逐行条件过滤即可:

df_filtered = df[(df["product_id"] == 23546) & (df["purchase_value"] == 50)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:06:08