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

如何在Pandas的b列所有行中查找a列每个值是否存在?

Pandas判断DataFrame中A列字符串是否存在于B列任意行中

我需要判断Pandas DataFrame的a列中每个字符串,是否在b列的任意一行里出现(不区分大小写)。

示例数据及期望结果

import pandas as pd

data = {"a":["hi","hello","yes","xyz"],
        "b":["asdfHI", "qwertHello","nononoXYZ", "OKOK"]}
df = pd.DataFrame(data)

# 原始数据:
#        a           b
# 0     hi      asdfHI
# 1  hello  qwertHello
# 2    yes   nononoXYZ
# 3    xyz        OKOK

# 期望生成`found`列:hi、hello和xyz存在于b列中,yes不存在
#        a           b      found
# 0     hi      asdfHI      True
# 1  hello  qwertHello      True
# 2    yes   nononoXYZ      False
# 3    xyz        OKOK      True

我尝试过的错误方法

# 仅逐行匹配,xyz所在行的b列是OKOK,所以匹配失败
df.apply(lambda x: x.a.lower() in x.b.lower(), axis=1)
# 输出结果:
# 0     True
# 1     True
# 2    False
# 3    False
# 错误判断逻辑:检查字符串是否在Series对象本身,而非Series的元素内容中
[aval.lower() in df.b.str.lower() for aval in df.a]
# 输出结果:[False, False, False, False]
# 传入Series给contains方法,触发类型错误
df.b.str.lower().str.contains(df.a.str.lower())
# 报错:TypeError: unhashable type: 'Series'
# 同样因传入Series而非单个字符串/正则表达式,触发类型错误
df.b.str.contains(df.a.str, case=False)
# 报错:TypeError: first argument must be string or compiled pattern

正确解决方案

方法1:遍历a列元素,检查整个b列(直观易懂)

# 先把b列所有内容转成小写并转为列表,方便后续查找
b_lower_list = df['b'].str.lower().tolist()
# 对a列每个元素转小写,检查是否存在于任意b列的字符串中
df['found'] = df['a'].str.lower().apply(lambda x: any(x in s for s in b_lower_list))

执行后得到符合预期的结果:

a           b  found
0     hi      asdfHI   True
1  hello  qwertHello   True
2    yes   nononoXYZ  False
3    xyz        OKOK   True

方法2:正则表达式批量匹配(适合数据量较大场景)

# 生成包含所有a列字符串的正则模式,不区分大小写
pattern = '|'.join(df['a'])
# 先找出b列中包含任意a列字符串的行
matched_b_rows = df['b'].str.contains(pattern, case=False)
# 对每个a列元素,判断是否存在于匹配到的b列内容中
df['found'] = df['a'].apply(lambda x: any(df['b'][matched_b_rows].str.lower().str.contains(x.lower())))

内容的提问来源于stack exchange,提问作者Bera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:37:56