Python 合并数据帧中的额外行

Python 合并数据帧中的额外行,python,pandas,Python,Pandas,我正在尝试合并2个数据帧。框架不共享列(键除外)。因此,合并应该只是从右向左添加列。然而,我也得到额外的行。我不明白这两行是从哪里来的 如果我使用left_索引和right_索引,那么它会工作得很好。然而,我不明白如何正常的键合并会有两个额外的行像在我的结果。谢谢 dat1 = np.array([['Afghanistan', 2007, 'new_ep_m1524', 0],['Afghanistan', 2007, 'new_sn_m65', 0], ['Afg

我正在尝试合并2个数据帧。框架不共享列(键除外)。因此,合并应该只是从右向左添加列。然而,我也得到额外的行。我不明白这两行是从哪里来的

如果我使用left_索引和right_索引,那么它会工作得很好。然而,我不明白如何正常的键合并会有两个额外的行像在我的结果。谢谢

dat1 = np.array([['Afghanistan', 2007, 'new_ep_m1524', 0],['Afghanistan', 2007, 'new_sn_m65', 0],
              ['Afghanistan', 2012, 'new_sn_f014', 1190],['Afghanistan', 2011, 'new_sn_f014', 851],
              ['Afghanistan', 2013, 'newrel_m014', 1705]], dtype=object)

dat2 = np.array([['ep', 'male', '15-24', 'Afghanistan', 2007],['sn', 'male', '65+', 'Afghanistan', 2007],
              ['sn', 'female', '0-14', 'Afghanistan', 2012],['sn', 'female', '0-14', 'Afghanistan', 2011],
              ['rel', 'male', '0-14', 'Afghanistan', 2013]], dtype=object)

left = pd.DataFrame(data=dat1, columns=['country', 'year', 'case_type', 'count'] ) 

rigt = pd.DataFrame(data=dat2, columns=['type', 'gender', 'age_group', 'country', 'year'])


display(left), display(right) 
pd.merge(left,right, on=['country', 'year'], how='outer')

结果

数据集中有重复的键<代码>阿富汗2007在每个数据帧中有两行。当与完全外部联接合并时,不清楚两个记录
Afghanistan 2007
中的哪一个应该在两个数据帧之间匹配。因此,两者都是结合在一起的。这就是为什么在合并的数据帧中有四条记录带有
Afghanistan 2007
(第一个数据帧中有2条记录,第二个数据帧中有2条记录)。

您的数据集中有重复的键<代码>阿富汗2007在每个数据帧中有两行。当与完全外部联接合并时,不清楚两个记录
Afghanistan 2007
中的哪一个应该在两个数据帧之间匹配。因此,两者都是结合在一起的。这就是为什么在合并的数据框中有四条记录带有
Afghanistan 2007
(第一个数据框中有2条记录,第二个数据框中有2条记录)。

您的合并是在列year上进行的,这不是每行唯一的

合并将左数据帧的第0行与右数据帧的第0行和第1行相关联,将左数据帧的第1行与右数据帧的第0行和第1行相关联


为了避免这种情况,您可以根据需要删除案例类型或添加唯一的id

您的合并在“年度”列上,这不是每行唯一的

合并将左数据帧的第0行与右数据帧的第0行和第1行相关联,将左数据帧的第1行与右数据帧的第0行和第1行相关联


为了避免这种情况,您可以根据需要删除案例类型或添加唯一的id

谢谢大家的回答,我现在知道原因了。谢谢大家的回答,我现在知道原因了。