基于部分匹配的国家名称连接两个数据框

如何解决基于部分匹配的国家名称连接两个数据框

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

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?