我的列中有字符串a
。我想搜索列中的所有行b
以查看是否a
在某个位置找到了每个值b
import pandas as pd
data = {"a":["hi","hello","yes","xyz"],
"b":["asdfHI", "qwertHello","nononoXYZ", "OKOK"]}
df = pd.DataFrame(data)
# a b
# 0 hi asdfHI
# 1 hello qwertHello
# 2 yes nononoXYZ
# 3 xyz OKOK
#hi, hello and xyz is somewhere in b. Yes isnt. I want to create the found column:
# a b found
# 0 hi asdfHI True
# 1 hello qwertHello True
# 2 yes nononoXYZ False
# 3 xyz OKOK True
#This only search rowwise so xyz isnt found:
df.apply(lambda x: x.a.lower() in x.b.lower(), axis=1)
# 0 True
# 1 True
# 2 False
# 3 False
#[aval.lower() in df.b.str.lower() for aval in df.a]
#[False, False, False, False]
#df.b.str.lower().str.contains(df.a.str.lower())
#TypeError: unhashable type: 'Series'
#df.b.str.contains(df.a.str, case=False)
#TypeError: first argument must be string or compiled pattern
您可以使用列表理解
any
:或者,
b
与您知道将不存在的分隔符连接并使用简单的分隔符in
(这可能效率较低):输出:
另一种可能的选择是使用numpy 广播
char.find
:或者也许这个变体具有
str.cat
/lower
&成员资格操作(使用in
):输出 :
性能图(约 10k 行):
NumPy 的方法对于非常小的数据非常有效,而 @mozway 的方法对于较大的数据来说是最有效的。