为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

摇曳的蔷薇 2022-08-25 15:05:51
我有两个熊猫数据帧:数据帧 1:ITEM ID TEXT1       some random words2       another word3       blah 4       random words 数据帧 2:INDEX INFO1     random3     blah 我想将 INFO 列(数据帧 2)中的值与数据帧 1 的 TEXT 列进行匹配。如果有匹配项,我希望看到一个带有“1”的新列。像这样:ITEM ID TEXT                  MATCH1       some random words       12       another word  3       blah                    14       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'我希望有人可以帮忙,谢谢!
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

试一试:


法典:


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()


查看完整回答
反对 回复 2022-08-25
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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


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


unique = df1['TEXT'].unique().tolist()

df2.eval("Match=Text.str.contains('|'.join(@unique))")


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号