我有两个熊猫数据框:
数据框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'
我希望有人能帮忙,谢谢!
答案 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))")