合并数据框架中的额外行pandas

时间:2017-10-02 23:28:05

标签: python pandas

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

如果我使用left_index和right_index,那么它将完美无缺。但是,我不明白正常的键合并如何在我的结果中有2个额外的行。感谢

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')

enter image description here

enter image description here

结果 enter image description here

2 个答案:

答案 0 :(得分:2)

您的数据集中有重复的键。 Afghanistan 2007在每个数据框中有两行。当与完全外部联接合并时,不清楚两个记录Afghanistan 2007中的哪一个应该在两个数据帧之间匹配。所以,两者都加入了。这就是为什么合并数据帧中有四个Afghanistan 2007的记录(第一个数据帧为2,第二个数据帧为2)。

答案 1 :(得分:0)

您的合并是在列年,这对于每一行都不是唯一的。

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

为避免您可以根据需要删除case_type或添加唯一ID。