pandas 根据value是否包含列表中的子字符串来筛选DataFrame中的列值

m1m5dgzv  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(137)

我有两个dataframe,我想看看dataframe #1中的特定列中的哪些值具有与dataframe #2中相应列中的值相等的子字符串。

data = {
  'id': ['TEST-123','WORD-456']
}

data2 = {
  'id':['123','456']
}

df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data2)

我试过用

df1 = df1[df1['id'].str.contains([i for i in df2.tolist()])]

但遇到了“TypeError:不可散列类型:'list''错误。
在这个例子中,我预期的 Dataframe 将是df 1保持不变,因为'TEST-123'具有来自df 2的子字符串'123','WORD-456'具有来自df 2的子字符串'456'。

uurity8g

uurity8g1#

您可以创建一个正则表达式来与str.contains一起使用:

import re

mask = df1['id'].str.contains(df2['id'].map(re.escape).str.cat(sep='|'), regex=True)

输出:

>>> df1[mask]
         id
0  TEST-123
1  WORD-456

>>> mask
0    True
1    True
Name: id, dtype: bool

>>> df2['id'].map(re.escape).str.cat(sep='|')
'123|456'

注意,str.contains需要一个字符串,而不是一个字符串列表。

相关问题