python - 基于部分匹配的国家名称连接两个数据框
问题描述
目前,我有两个如下所示的数据框:
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 国家/地区名称的有效方法?感谢您在这个主题上给我的任何帮助。
解决方案
您可以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
推荐阅读
- elasticsearch - Elasticsearch 中的评分脚本插件
- php - GD 不支持 JPEG
- mongodb - 如何使用 mongo 查询使用 asp.net 核心从集合中获取特定数据
- jupyter-notebook - Jupyter notebook 不工作(无法识别代码)
- azure - VS 2019更新后运行azure函数时调试配置文件不存在错误
- angular - ng-select 多次重置 ngModel 数组
- sql-server - 使用基于外键的左连接仅检索一行
- sql - 连续存储 1 列或多列的历史记录
- swift - Swift:应用程序:openURL:未调用方法
- node.js - 无法在 nodejs API 中获取十进制值?