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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:24:04