2017-02-08 278 views
1

如何在python中叠加/合并两个数据帧,以便重叠的单元格(索引,列)被添加,而不常见的单元格保留原始数据框中的值?在Python中合并两个数据帧

这可以在Excel中解释为here

对于如: 我有两个数据帧

DF1 = df1 DF2 = df2

我要输出到像

output_df = output_df

回答

1

您需要addfillna ,但在df1df2必须是NO NaN值,be导致fillna删除:

print (df1.add(df2, fill_value=0).fillna(0).astype(int)) 
    a b c 
a1 1 2 0 
a2 3 514 123 
a3 5 539 134 

indexesreindexunion另一个解决方案 - 工作,如果NaNDataFrames

idx = df1.index.union(df2.index) 

print (df1.reindex(idx, fill_value=0)) 
    a b 
a1 1 2 
a2 3 4 
a3 5 6 

print (df2.reindex(idx, fill_value=0)) 
     b c 
a1 0 0 
a2 510 123 
a3 533 134 

idx = df1.index.union(df2.index) 
print (df1.reindex(idx, fill_value=0) 
     .add(df2.reindex(idx, fill_value=0), fill_value=0) 
     .astype(int)) 
    a b c 
a1 1 2 0 
a2 3 514 123 
a3 5 539 134 

df1 = pd.DataFrame({'a':[1,3,5], 
        'b':[2,4,6]}, index=['a1','a2','a3']) 

print (df1) 
    a b 
a1 1 2 
a2 3 4 
a3 5 6 

df2 = pd.DataFrame({'b':[510,533], 
        'c':[123,np.nan]}, index=['a2','a3']) 

print (df2) 
     b  c 
a2 510 123.0 
a3 533 NaN 

print (df1.reindex(idx, fill_value=0).add(df2.reindex(idx, fill_value=0), fill_value=0)) 
     a b  c 
a1 1.0 2 0.0 
a2 3.0 514 123.0 
a3 5.0 539 NaN 
print (df1.add(df2, fill_value=0).fillna(0).astype(int)) 
    a b c 
a1 1 2 0 
a2 3 514 123 
a3 5 539 0 <- replace NaN to 0 
+0

比非常感谢你!我已经与您的第一个解决方案,第二个解决方案可能会折叠索引。纠正我,如果我错了 – user3471409

+0

我认为第二个解决方案也可以工作,但它有点复杂,因为如果数据框(其中一个或两个)具有'NaN'则工作。 – jezrael