我尝试合并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')
答案 0 :(得分:2)
您的数据集中有重复的键。 Afghanistan 2007
在每个数据框中有两行。当与完全外部联接合并时,不清楚两个记录Afghanistan 2007
中的哪一个应该在两个数据帧之间匹配。所以,两者都加入了。这就是为什么合并数据帧中有四个Afghanistan 2007
的记录(第一个数据帧为2,第二个数据帧为2)。
答案 1 :(得分:0)
您的合并是在列年,这对于每一行都不是唯一的。
合并将左侧数据帧的第0行与右侧数据帧的第0行和第1行相关联,左侧数据帧的第1行与右侧数据帧的第0行和第1行相关联。
为避免您可以根据需要删除case_type或添加唯一ID。