Python:如何判断DataFrame列是否存在同时包含两个列表各至少一个值的行
代码问题修正与实现方案
原有代码错误点
- 循环逻辑固定取第一列
df1.iloc[:,0]判断,未实际遍历每一列 str.contains不支持直接传入两个列表作为匹配规则,需要先将关键词列表转换为正则表达式的或逻辑格式- 未将判断结果存入dummy列表,错误在普通循环中使用
return,且else后缺少冒号导致语法错误 - 没有实现「同一行同时包含两个列表各至少一个元素」的判断逻辑
实现代码
import pandas as pd import re # 基础数据 list1 = ['apple','orange','pear'] list2 = ['big','small','round'] data = {'col1': ['big apple','round pear'], 'col2': ['round kiwi','large orange'], 'col3':['large pear','large kiwi']} df1 = pd.DataFrame(data) # 构造正则匹配规则,re.escape用于处理关键词含特殊正则字符的情况 pattern1 = '|'.join(map(re.escape, list1)) pattern2 = '|'.join(map(re.escape, list2)) dummy = [] for col in df1.columns: # 逐列判断是否存在至少一行同时匹配两个列表的关键词 has_valid_row = (df1[col].str.contains(pattern1, na=False) & df1[col].str.contains(pattern2, na=False)).any() dummy.append(1 if has_valid_row else 0) # 输出结果和预期一致:[1, 0, 0] print(dummy)
关键逻辑说明
str.contains的第一个参数传入关键词1|关键词2|关键词3格式的字符串,即可匹配包含任意一个关键词的内容&实现同时满足两个匹配规则的逻辑,对应「同一行同时包含两个列表各至少一个元素」的要求.any()会对布尔序列做聚合,只要有一个为True就返回True,符合「任意一行满足即可」的需求na=False参数用于处理列中的空值,避免空值导致匹配报错
如果后续需要和原数据拼接,可直接将dummy结果转换为DataFrame:
dummy_df = pd.DataFrame({ 'column': df1.columns, 'dummy_flag': dummy })
内容的提问来源于stack exchange,提问作者jeanstaeej
相关产品推荐
相关产品推荐

