将所有值str列数据框与其他数据框str列匹配

时间:2020-03-11 00:52:28

标签: python pandas

我有两个熊猫数据框:

数据框1:

UPDATEing

数据框2:

ITEM ID TEXT
1       some random words
2       another word
3       blah 
4       random words 

我想将(数据帧2的)INFO列中的值与数据帧1的TEXT列进行匹配。如果存在匹配项,我希望看到一个新的列,其值为“ 1”。

类似这样的东西:

INDEX INFO
1     random
3     blah 

我能够使用此行代码为要查找的INFO列的每个值创建一个匹配项:

ITEM ID TEXT MATCH 1 some random words 1 2 another word 3 blah 1 4 random words 1

但是,实际上,我的真实数据框2有5000行。因此,我无法手动复制粘贴所有这些内容。但基本上我正在寻找这样的东西:

dataframe1.loc[dataframe1['TEXT'].str.contains('blah'), 'MATCH'] = '1'

我希望有人能帮忙,谢谢!

2 个答案:

答案 0 :(得分:0)

试一下:

代码:

dfA['MATCH']    = dfA['TEXT'].apply(lambda x: min(len([ y for y in dfB['INFO'] if y in x]), 1))

输出:

   ITEM ID               TEXT  MATCH
0        1  some random words      1
1        2       another word      0
2        3               blah      1
3        4       random words      1

如果不匹配,则为0,但这很容易清除。

也许会有更好/更快的本机解决方案,但是它可以通过遍历“ TEXT”列和“ INFO”来完成工作。根据您的使用情况,它可能足够快。

看起来像.map()代替.apply()也可以工作。再次根据您的用例在时间上有所不同。

答案 1 :(得分:0)

已更新,以考虑到字符串包含而不是完全匹配...

您可以从第一个数据框中的列中获取唯一值,将它们转换为列表,然后在第二个数据框中使用eval方法,并在该列表上包含Column.str。

unique = df1['TEXT'].unique().tolist()
df2.eval("Match=Text.str.contains('|'.join(@unique))")