我在列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
字符串
2条答案
按热度按时间anauzrmj1#
你可以在
any
中使用列表解析:字符串
或者,用一个分隔符连接
b
,你知道这个分隔符将不存在,并使用一个简单的in
(这可能效率较低):型
输出量:
型
zf2sa74q2#
另一种可能的选择是使用numpybroadcasting和
char.find
:字符串
或者这个变体可以使用
str.cat
/lower
和成员操作(usingin
):型
输出量:
型
一个perfplot(of ~ 10 k rows):
NumPy的方法在非常小的数据上是有效的,而@mozway的方法在较大的数据上是最快的。
x1c 0d1x的数据