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

Pandas识别A/B/C列同值且组内D列含Invalid的行并返回布尔向量

Pandas 实现方案

核心逻辑是按A、B、C三列分组后,判断每个分组的D列是否存在'Invalid'值,再将分组级别的判定结果映射到组内所有行。

步骤1:构造示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'A': [0,0,0,1,1,1,2,2,2,1],
    'B': [0,0,0,1,1,1,2,2,2,2],
    'C': [0,0,0,1,1,1,2,2,2,5],
    'D': [np.nan, np.nan, 'Invalid', np.nan, np.nan, np.nan, np.nan, np.nan, 'update', np.nan]
})

步骤2:核心实现(一行代码搞定)

用groupby.transform直接将分组判定结果广播到每一行,是最简洁的写法:

result = df.groupby(['A', 'B', 'C'])['D'].transform(lambda x: (x == 'Invalid').any())

输出结果验证

针对示例数据,输出的布尔向量如下,完全符合预期:

0     True
1     True
2     True
3    False
4    False
5    False
6    False
7    False
8    False
9    False
Name: D, dtype: bool

大数据量优化方案

如果你的数据量超过10万行,用merge的方式性能更好,避免lambda函数在transform中的额外开销:

# 先计算每个分组是否存在Invalid
group_flag = df.groupby(['A', 'B', 'C'])['D'].agg(has_invalid=lambda x: (x == 'Invalid').any()).reset_index()
# 关联回原表得到每行的结果
df = df.merge(group_flag, on=['A', 'B', 'C'], how='left')
result = df['has_invalid']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:24:06