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_
相关产品推荐
相关产品推荐

