在Pandas中使用序列中的字符串检查str.contains
为什么在使用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