我正在尝试加入两个数据框,其中分别包括按国家代码和年份列出的奥运会奖牌总数以及按国家代码和年份列出的国家人口。每个都是具有相同多索引(国家、人口)的一列数据框。
数据框不一定包含相同的国家和年份,例如奥运会年份没有一般年份那么多,并且人口估计数据集中缺少一些国家代码。一些摘录来说明 ITA 和部分重叠的一些年份的数据结构:
医学:
Medals
Cty Year
ITA 1960 88
1964 50
1968 32
1972 25
1976 31
流行:
Population
Cty Year
ITA 1960 50199700.0
1961 50536350.0
1962 50879450.0
1963 51252000.0
1964 51675350.0
当我使用此命令时,我得到一个空数据框。
[In] df = pd.merge(med, pop, left_index=True, right_index=True)
[In] df
[Out] Empty DataFrame
Columns: [Medals, Population]
Index: []
我还尝试在每个数据帧上使用reset_index,然后传递以下内容:
[In] df = pd.merge(med, pop, on=['Cty','Year'])
[In] df
[Out] Empty DataFrame
Columns: [Cty, Year, Population, Medals]
Index: []
它似乎已经创建了具有预期列名称的数据框,但由于某种原因,它甚至无法合并两者中存在的 Cty 和 Year 索引的组合(这将是我使用此内部联接的目标)。
根据我之前发布的两个数据子集,预期输出应如下所示:
Medals Population
Cty Year
ITA 1960 88 50199700.0
1964 50 51675350.0
我已经彻底搜索了这个网站和其他网站,但我无法理解它!任何帮助将不胜感激!
最佳答案
事实证明,问题不在于我的合并或连接语法,而在于多索引中一个数据帧将年份存储为 str,另一个数据帧存储为 int64。
我使用以下代码将 str 1 转换为 int64,合并运算符随后按预期工作:
pop.index = pop.index.set_levels([pop.index.levels[0], pop.index.levels[1].astype(int)])
我发布此内容作为我自己帖子的答案的唯一原因是为了证明该评论,我感谢 root 的提示,以防其他人遇到类似问题。
关于python - 多索引合并返回空 df 但连接应该有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48917052/