[英]check str.contains in pandas using string from series
为什么这不适用于使用熊猫的字符串方法?
df['col1'].str.contains(df['col2'])
不断得到:“系列”对象是可变的,因此它们不能被散列。
更新:为了澄清 - 我会逐行比较这些列,并让部分字符串按顺序完全匹配。 例如,对于下面的第 1 列和第 2 列,我希望上面的输出与输出中的一样:
col-1 col-2 output
'cat' 'at' True
'aunt' 'at' False
'dog' 'dg' False
'edge' 'dg' True
您可以定义一个简单的函数,然后只测试一列中的一个值是否在另一列中:
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
您可以使用 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 函数将对 col-1 和 col-2 执行逐行字符串比较,并将结果存储在“输出”列中。
类似地,同样的概念也可用于对数据帧执行数学运算。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.