在Pandas中使用序列中的字符串检查str.contains

4 投票
2 回答
3732 浏览
提问于 2025-04-20 11:36

为什么在使用pandas处理字符串方法时,这个不管用呢?

df['col1'].str.contains(df['col2'])

我总是收到这样的提示:'Series'对象是可变的,因此无法进行哈希。

更新:为了更清楚地说明 - 我想逐行比较这些列,并且希望部分字符串能够完全匹配。例如,对于下面的第一列和第二列,我希望上面的输出结果能像下面这样:

col-1    col-2    output
'cat'    'at'     True
'aunt'   'at'     False
'dog'    'dg'     False
'edge'   'dg'     True

2 个回答

1

你可以使用lambda函数在数据框的每一行上进行操作。

针对你的问题:

>> df = pd.DataFrame({'col-1':['cat','aunt','dog','edge'], 'col-2':['at','at','dg','dg']})

>> df
 col-1 col-2
0   cat    at
1  aunt    at
2   dog    dg
3  edge    dg

>> df['output'] = df.apply(lambda row : row['col-2'] in row['col-1'], axis=1)

>> df
  col-1 col-2  output
0   cat    at    True
1  aunt    at   False
2   dog    dg   False
3  edge    dg    True

这里的lambda函数会对第一列和第二列的字符串进行逐行比较,并把结果存储在“输出”这一列里。

同样的概念也可以用来在数据框上进行数学运算。

4

你可以定义一个简单的函数,然后用一个测试来检查某一列中的一个值是否在另一列中:

In [37]:

df = pd.DataFrame({'col1':['mn','mxn','ca','sd','xa','ac'], 'col2':['m','n','x','n','q','y']})
def func(x):
    return x.col2 in list(x.col1)
df.apply(func, axis=1)
Out[37]:
0     True
1     True
2    False
3    False
4    False
5    False
dtype: bool

对于你的需求,下面的代码应该能满足你的要求:

return x.col2 in x.col1

撰写回答