gpt4 book ai didi

python - 基于子字符串匹配执行合并?

转载 作者:行者123 更新时间:2023-12-01 09:24:35 25 4
gpt4 key购买 nike

虽然这个问题与 Fuzzy Match Merge with Pandas 密切相关,这个问题具体是关于当一个 DataFrame 中的键完全匹配或另一个 中键的子字符串时(或在本例中为子集)合并的问题>数据框。为了说明我的观点,这里有 2 个 DataFrame:

df1
id code
0 1 E282
1 2 O0080
2 3 R52
3 4 J0100
4 5 F99

df2
code val
0 V282 11
1 O008 12
2 J0101 13
3 F99 14
4 R55 15

使用 difflib 的问题是我真的不想匹配最接近的字符串,并且我不确定是否能够像 V282 那样分隔匹配code> 到 E282,这不应该发生,而像 O008O0080 这样的匹配应该合并。

预期输出应该是

   code1  id
0 O0080 2
1 F99 5

我可以得到这个结果

import numpy as np
df1[np.logical_or.reduce([df1['code'].str.contains(code) for code in df2.code.tolist()])]

但是由于 df1 的长度为 42M 行,而 df2 包含约 4000 个代码,因此此方法慢得令人难以置信。这是我要做的最好的事情吗?这似乎很不幸,当在精确的键上内部合并 21M 行 df 和 7M 行 df 需要 < 1 分钟。

最佳答案

这是一个难题。也许考虑一下 python 方法? any 都会在此处短路,因此您应该节省一些周期。另外,contains 不一定从头开始检查,因此使用 startswith 应该会更有效。

df1[
any(
i.startswith(j) for j in df2.codes.tolist()
) for i in df1.codes.tolist()
]

关于python - 基于子字符串匹配执行合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50538051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com