首页 > 解决方案 > 基于部分匹配的国家名称连接两个数据框

问题描述

目前,我有两个如下所示的数据框:

DF1:

日期 国家 一个 C
2020 年 1 月 1 日 美国 0 1 5
2020 年 1 月 2 日 美国 2 5 0
2020 年 1 月 3 日 美国 1 4 1
... ... ... ... ...
2020 年 1 月 1 日 大韩民国 2 3 7
2020 年 1 月 2 日 大韩民国 4 5 6

和 DF2:

日期 国家 D
2020 年 1 月 1 日 美国 9.0
2020 年 1 月 2 日 美国 9.1
2020 年 1 月 3 日 美国 9.4
... ... ...
2020 年 1 月 1 日 韩国 2.1
2020 年 1 月 2 日 韩国 2.5

我想将它们合并到 'Country' 和 'Date_reported' 但它们用于每个国家/地区的名称可能完全不同。我已经研究了fuzzywuzzy 和其他一些包,但我找不到一个可以让我完全按照我想要的方式进行合并的命令。我希望最终得到以下数据框(使用 DF1 的国家/地区名称):

日期 国家 一个 C D
2020 年 1 月 1 日 美国 0 1 5 9.0
2020 年 1 月 2 日 美国 2 5 0 9.1
2020 年 1 月 3 日 美国 1 4 1 9.4
... ... ... ... ... ...
2020 年 1 月 1 日 大韩民国 2 3 7 2.1
2020 年 1 月 2 日 大韩民国 4 5 6 2.5

有没有一种不需要我手动切换所有 DF2 国家/地区名称的有效方法?感谢您在这个主题上给我的任何帮助。

标签: pythonpandasdataframemergefuzzywuzzy

解决方案


您可以fuzzymatcher尝试一下,但请记住,它可能不适用于所有情况。

# pip install fuzzymatcher
from fuzzymatcher import link_table, fuzzy_left_join

merge_df = fuzzy_left_join(df, df1, ["Country", "Date"], ["Country", "Date"])
merge_df = merge_df[["Date_left", "Country_left", "A", "B", "C", "D"]]

    Date_left   Country_left        A   B   C   D
0   01/01/2020  The United States   0   1   5   9.0
3   01/02/2020  The United States   2   5   0   9.1
4   01/03/2020  The United States   1   4   1   9.4
5   01/01/2020  Republic of Korea   2   3   7   2.1
10  01/02/2020  Republic of Korea   4   5   6   2.5

推荐阅读