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

我有两个熊猫数据帧:


数据帧 1:


ITEM ID TEXT

1       some random words

2       another word

3       blah 

4       random words 

数据帧 2:


INDEX INFO

1     random

3     blah 

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


像这样:


ITEM ID TEXT                  MATCH

1       some random words       1

2       another word  

3       blah                    1

4       random words            1

我能够通过以下代码行为每个 INFO 列的值创建一个匹配项:


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


但是,实际上,我的真实数据帧 2 有 5000 行。所以我不能手动复制粘贴所有这些。但基本上我正在寻找这样的东西:


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


我希望有人可以帮忙,谢谢!


摇曳的蔷薇
浏览 112回答 2
2回答

慕田峪7331174

试一试:法典:dfA['MATCH']    = dfA['TEXT'].apply(lambda x: min(len([ y for y in dfB['INFO'] if y in x]), 1))输出:   ITEM ID               TEXT  MATCH0        1  some random words      11        2       another word      02        3               blah      13        4       random words      1如果不是比赛,那就是0,但这很容易被淘汰。可能有一个更好/更快的本机解决方案,但它通过迭代“TEXT”列和“INFO”来完成工作。根据您的使用案例,它可能足够快。看起来代替也会一样好用。同样,根据您的使用案例,可能会在时间上有所不同。.map().apply()

拉风的咖菲猫

更新以考虑字符串包含而不是完全匹配...您可以从第一个数据帧中的列中获取唯一值,将其转换为 list,然后在第二个数据帧上使用 eval 方法,并在该列表中使用 Column.str.contains。unique = df1['TEXT'].unique().tolist()df2.eval("Match=Text.str.contains('|'.join(@unique))")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python