2017-02-08 526 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