如何在Pandas DataFrame每行匹配指定数字集并新增布尔列
Pandas实现行级集合包含判断并新增标记列
首先定义示例DataFrame:
import pandas as pd df1 = pd.DataFrame({ "T1": [1, 7, 1, 6], "T2": [7, 8, 9, 2], "T3": [8, 6, 6, 6], "T4": [3, 3, 3, 8], "T5": [9, 1, 2, 7] }) print(df1)
输出结果:
T1 T2 T3 T4 T5 0 1 7 8 3 9 1 7 8 6 3 1 2 1 9 6 3 2 3 6 2 6 8 7
需求说明
需要新增Cond1和Cond2两列,标记规则如下:
Cond1:若该行包含集合{1,8,3}的所有元素,标记为'T',否则为'F'Cond2:若该行包含集合{7,8,6}的所有元素,标记为'T',否则为'F'
最终目标输出:
T1 T2 T3 T4 T5 Cond1 Cond2 0 1 7 8 3 9 T F 1 7 8 6 3 1 T T 2 1 9 6 3 2 F F 3 6 2 6 8 7 F T
实现方法
代码实现
# 定义判断用的集合 cond1_set = {1, 8, 3} cond2_set = {7, 8, 6} # 新增Cond1列,按行判断集合包含关系 df1['Cond1'] = df1.apply(lambda row: 'T' if cond1_set.issubset(set(row)) else 'F', axis=1) # 新增Cond2列,同理 df1['Cond2'] = df1.apply(lambda row: 'T' if cond2_set.issubset(set(row)) else 'F', axis=1) # 打印结果 print(df1)
关键逻辑解释
axis=1指定按行遍历DataFrameset(row)将当前行的所有元素转换为集合,利用集合的特性快速判断包含关系issubset()方法用于验证目标集合是否完全被当前行的元素集合包含,即该行是否涵盖目标集合的所有元素- 通过三元表达式将布尔判断结果转为需求的
'T'/'F'标记
内容的提问来源于stack exchange,提问作者JELANI SIMEON
相关产品推荐
相关产品推荐

