繁体   English   中英

使用系列中的字符串检查熊猫中的 str.contains

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM