我有 2 个数据框,我想要实现的目标是创建匹配的 ID 列表。有了这些信息,我就可以稍后执行合并(合并不是我的问题的一部分,我只是想了解如何正确匹配行)。
DF1
DF2
期望结果 - 我想获取匹配的字符串列表
我当前使用的代码如下
df2['ID'].str.extract(fr"({'|'.join(df1['ID'].values)})", expand=False)
问题是此代码与 DF1 中的 ID 不完全匹配,如果您在上面的所需结果中看到索引 2,结果是123B,但是我我只得到 123。
以下是我使用当前代码得到的结果。
任何帮助将不胜感激。感谢您, 西安
最佳答案
您的问题是,当它查找匹配项并返回第一个匹配项时,它会从 DF1 的顶部进行检查。如果按列中字符串的长度对数据帧进行排序,它将返回最长的匹配项。
这应该可以解决您的问题:
# Sort by length of string
new_index = df1.ID.str.len().sort_values().index
df1 = df1.reindex(index = new_index[::-1]).reset_index(drop=True)
# Match strings
df2['ID'].str.extract(fr"({'|'.join(df1['ID'].values)})", expand=False)
关于python - 正则表达式 - 将子字符串与字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70346324/