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

Pandas遍历多列匹配关键词生成flag列结果异常求助

解决Pandas多列关键词匹配生成flag列的问题

你的循环代码核心问题是每次赋值都会覆盖之前的flag列结果,最终只保留最后一列的判断,完全不符合“任意列匹配就标记1”的需求。以下是正确的实现方式:

方法1:逐行检查所有列(直观易读)

直接对每行遍历所有单元格,判断是否包含任意关键词:

import pandas as pd
# Sample DataFrame
data = {'column1': ['sp123', 'abc', 'sp456', 'def'], 'column2': ['tp1234', 'abc', 'sp4256', 'def'], 'column3': ['syp123', 'abc', 'sp456', 'def']}
df = pd.DataFrame(data)
# List of keywords
keywords = ['sp', 'xyz']

# 新增flag列:任意列包含关键词则标记为1
df['flag'] = df.apply(
    lambda row: 1 if any(keyword in str(cell) for cell in row for keyword in keywords) else 0,
    axis=1  # axis=1表示按行处理
)
print(df)

方法2:使用字符串匹配优化性能(更高效)

利用str.contains批量匹配,再通过any(axis=1)判断每行是否有匹配项:

import pandas as pd
data = {'column1': ['sp123', 'abc', 'sp456', 'def'], 'column2': ['tp1234', 'abc', 'sp4256', 'def'], 'column3': ['syp123', 'abc', 'sp456', 'def']}
df = pd.DataFrame(data)
keywords = ['sp', 'xyz']

# 拼接关键词为正则表达式
pattern = '|'.join(keywords)
# 对所有列执行字符串匹配,再取每行的逻辑或,最后转成int类型
df['flag'] = df.astype(str).apply(lambda col: col.str.contains(pattern, na=False), axis=0).any(axis=1).astype(int)
print(df)

两种方法运行后都会得到预期结果:

column1 column2 column3  flag
0   sp123  tp1234  syp123     1
1     abc     abc     abc     0
2   sp456  sp4256   sp456     1
3     def     def     def     0

内容的提问来源于stack exchange,提问作者TIC-FLY

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:33:16