【发布时间】:2021-01-28 14:08:25
【问题描述】:
我有两个熊猫数据框 df1 和 df2。我需要通过搜索 df2['B'] 在 df1 中创建一个新列,以查看 df1['A'] 是否是 df2['B'] 的子字符串,反之亦然。如果匹配,则返回 df1['B'] 中新列的 df2['A'] 的值。
以下是示例数据框
df1
A B
8GSHDK1 ?
SDFAGHJFDJ GSHJGGFV
678HJDGGH
576GHJHJJKHJJH
YRYWEUIYWRE
df2
A B
1 GSHJGGFV
2 XXXYYYYY
3 8GSHDK1 TO BE DEL
在这种情况下合并不起作用,因为 df1['A'] 包含 df2['B'] 的子字符串或 df2['B'] 包含 df1['A'] 的子字符串。
我在下面尝试过,但它运行了 7 到 8 个小时。 df1 有 25k 条记录,df2 有 720k 条记录
df1['B']=df1['A'].apply(lambda x: df2[df2['B'].str.contains(x) | df2['B'].apply(lambda y : y in x)]['B'].any())
任何帮助将不胜感激。 预期输出:
df1
A B
8GSHDK1 8GSHDK1 TO BE DEL
SDFAGHJFDJ GSHJGGFV GSHJGGFV
678HJDGGH None
576GHJHJJKHJJH None
YRYWEUIYWRE None
【问题讨论】:
-
我试过了,但性能没有提高。完成剧本花了 9 个小时。 df1 有 25k 条记录,df2 有 720k 条记录