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

如何判断Pandas DataFrame中col1字符串是否包含col2对应值?

在Pandas中逐行判断col1是否包含col2的字符串解决方案

刚好之前解决过类似的问题,我来帮你理清楚怎么处理这个需求:你需要在Pandas DataFrame中新增一列,标记每行的col1字符串是否包含对应行col2的字符串。

先明确你的示例场景:

import pandas as pd

df = pd.DataFrame({'col1': ['a', 'aa', 'b', 'bb', 'c', 'cc'], 'col2': ['a', 'b', 'c', 'd', 'e', 'c']})
# 期望得到的标记列:pd.Series([True, False, False, False, False, True])

为什么直接用df.col1.str.contains(df.col2)会报错?

当你尝试执行df.col1.str.contains(df.col2)时触发TypeError,核心原因是:
str.contains()方法的pat参数默认要求传入单个字符串(或者正则表达式模式),它会把整个col2的Series当成一个整体的匹配模式,而不是逐行对应匹配每一对col1和col2的值,这就导致了类型不匹配的错误。

正确的解决方案

这里给你三种可行的实现方式,按需选择:

方法1:使用apply()逐行处理(直观易懂)

这是最直观的写法,通过apply()遍历每一行,对每行的col1和col2做包含判断:

df['contains_flag'] = df.apply(lambda row: row['col2'] in row['col1'], axis=1)

方法2:使用列表推导式(性能更优)

如果你的DataFrame数据量较大,列表推导式的性能会比apply()更好,因为它避开了Pandas行级循环的额外开销:

df['contains_flag'] = [col2 in col1 for col1, col2 in zip(df['col1'], df['col2'])]

方法3:使用numpy的vectorize(向量化实现)

你也可以用numpy的向量化函数来实现逐行匹配,适合习惯向量化编程的场景:

import numpy as np

contains_check = np.vectorize(lambda x, y: y in x)
df['contains_flag'] = contains_check(df['col1'], df['col2'])

执行任意一种方法后,df['contains_flag']都会得到你期望的结果:

0     True
1    False
2    False
3    False
4    False
5     True
Name: contains_flag, dtype: bool

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:34:10