如何解决基于部分匹配的国家名称连接两个数据框
目前,我有两个数据框,如下所示:
DF1:
日期 | 国家 | A | B | C |
---|---|---|---|---|
01/01/2020 | 美国 | 0 | 1 | 5 |
01/02/2020 | 美国 | 2 | 5 | 0 |
01/03/2020 | 美国 | 1 | 4 | 1 |
... | ... | ... | ... | ... |
01/01/2020 | 大韩民国 | 2 | 3 | 7 |
01/02/2020 | 大韩民国 | 4 | 5 | 6 |
和 DF2:
日期 | 国家 | D |
---|---|---|
01/01/2020 | 美国 | 9.0 |
01/02/2020 | 美国 | 9.1 |
01/03/2020 | 美国 | 9.4 |
... | ... | ... |
01/01/2020 | 韩国 | 2.1 |
01/02/2020 | 韩国 | 2.5 |
我想将它们合并到“国家/地区”和“Date_reported”上,但它们用于每个国家/地区的名称可能大不相同。我已经研究过fuzzywuzzy 和其他一些包,但我找不到一个类似合并的命令来让我做我想做的事。我希望最终得到以下数据框(使用 DF1 的国家/地区名称):
日期 | 国家 | A | B | C | D |
---|---|---|---|---|---|
01/01/2020 | 美国 | 0 | 1 | 5 | 9.0 |
01/02/2020 | 美国 | 2 | 5 | 0 | 9.1 |
01/03/2020 | 美国 | 1 | 4 | 1 | 9.4 |
... | ... | ... | ... | ... | ... |
01/01/2020 | 大韩民国 | 2 | 3 | 7 | 2.1 |
01/02/2020 | 大韩民国 | 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"],"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
,
您可以创建一个包含在 df1 中但不在 df2 中的国家列表,如下所示:
new_list=[]
for country in df1.country.tolist():
if country not in df2.country.tolist():
new_list.append(country)
new_list
相应地,您需要更改df2中的国家/地区名称。您可以通过使用 new_list 中存在的国家/地区创建字典来实现。
dict={"United States of America":"The United States","Republic of Korea","South Korea"}
df2["Country"].replace(dict,inplace=True)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。