熊猫-合并多个具有不同索引和一些相同列名的Datasrames

时间:2020-03-18 02:29:13

标签: python pandas

我有多个具有不同索引和不同列的数据框。 我想将它们合并,并希望将具有相同名称的那些列合并为一个。 我尝试了外部联接,但不会合并具有相同名称的列。 同样适用于pd.update,但是由于我的数据具有不同的索引,因此这似乎无法正常工作。 有人可以给我一些建议吗?谢谢。

输入>

ID    Cat1    Cat2  
1     0       75  
2     61      0 


ID    Cat2    Cat3  
3     5       75  

ID    Cat2   Cat4
4     54      40 
5     20      38 

所需的输出>

ID    Cat1    Cat2  Cat3 Cat4
1     0       75     0    0
2     61      0      0    0
3     0       5      75   0
4     0       54     0    40 
5     0       20     0    38 

2 个答案:

答案 0 :(得分:1)

您可以先从set_indexID,然后链接combine_first

df1 = pd.DataFrame({'ID': {0: 1, 1: 2}, 'Cat1': {0: 0, 1: 61}, 'Cat2': {0: 75, 1: 0}}).set_index("ID")
df2 = pd.DataFrame({'ID': {0: 3}, 'Cat2': {0: 5}, 'Cat3': {0: 75}}).set_index("ID")
df3 = pd.DataFrame({'ID': {0: 4, 1: 5}, 'Cat2': {0: 54, 1: 20}, 'Cat4': {0: 40, 1: 38}}).set_index("ID")

print (df1.combine_first(df2).combine_first(df3).fillna(0))

    Cat1  Cat2  Cat3  Cat4
ID                        
1    0.0  75.0   0.0   0.0
2   61.0   0.0   0.0   0.0
3    0.0   5.0  75.0   0.0
4    0.0  54.0   0.0  40.0
5    0.0  20.0   0.0  38.0

答案 1 :(得分:0)

所有数据帧中的顺序merge将是一个解决方案

df_all = pd.merge(df1,df2,how='outer', on=['ID'])
df_all = pd.merge(df_all,df3,how='outer', on=['ID'])
df_all = df_all.fillna(0)

或者,使用pd.concat

df_all = pd.concat([df1, df2, df3], join='outer', axis=1, sort=False).fillna(0)