Python pandas按分组判断列是否含列表全部元素并新增yes/no列
需求说明
给定目标列表与原始DataFrame:
The_list=["A","B"]
Groups COL2 G1 A G1 B G1 C G2 A G2 D G3 A G3 B G4 A G5 B
需要新增COL3列,分组判断规则:
- 按
Groups字段拆分每组数据 - 如果当前组的
COL2列包含The_list中的所有元素,组内所有行COL3赋值为yes - 不满足条件的组,组内所有行
COL3赋值为no
预期输出结果:
Groups COL2 COL3 G1 A yes G1 B yes G1 C yes G2 A no G2 D no G3 A yes G3 B yes G4 A no G5 B no
实现代码
基于pandas实现,用groupby配合transform直接把分组判断结果映射到每一行,无需额外循环:
import pandas as pd # 构造原始数据集 df = pd.DataFrame({ 'Groups': ['G1','G1','G1','G2','G2','G3','G3','G4','G5'], 'COL2': ['A','B','C','A','D','A','B','A','B'] }) The_list = ["A","B"] # 计算COL3列 df['COL3'] = df.groupby('Groups')['COL2'].transform( lambda col: 'yes' if set(The_list).issubset(set(col)) else 'no' )
核心逻辑:将每个分组的COL2值转为集合,用issubset判断目标列表的所有元素是否都被包含,判断结果会自动填充到分组内的每一行。运行代码后得到的结果和预期完全一致。
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

