2016-01-22 91 views
4

我可能正在接近這是錯誤的方式。如果我有兩個dataframes a和b:合併並求和兩個數據幀,其中列匹配python熊貓

數據框答:

a b c 
1 2 4 
1 6 5 
1 8 7 

和數據幀B:

a b c d 
1 2 4 9 
1 6 5 7 
1 8 7 10 

而且我想加入他們,但cruically總結列,其中列名匹配並保留不匹配的列名稱。因此,最終連接表看起來像:

a b c d 
2 4 8 9 
2 12 10 7 
2 16 14 10 

注:指數法總是匹配(即相同數量的以相同的順序記錄)

+0

你的輸出不匹配輸入的DFS,DF B丟失'10'列'D',也是在這種情況下,你可以做'df1.add(DF,fill_value = DF1)' – EdChum

+0

其實這是有效的:'df1.add(df).fillna(df1)' – EdChum

+0

如果'df'和'df1'上的索引不匹配(但列仍然存在),你會怎麼做?我得到所有'NaN' – erasmortg

回答

5

你可以在較大的致電add DF傳入其他DF和呼叫fillna

In [18]: 
df1.add(df).fillna(df1) 

Out[18]: 
    a b c d 
0 2 4 8 9 
1 2 12 10 7 
2 2 16 14 10 

另一種方法是使用combine_first

In [20]: 
df1.add(df).combine_first(df1) 

Out[20]: 
    a b c d 
0 2 4 8 9 
1 2 12 10 7 
2 2 16 14 10 
1

您可以對齊數據框,用NAN填充零並執行簡單的添加。

d = pd.DataFrame(data, columns=['a','b','c']) 
d2 = pd.DataFrame(data2, columns=['a','b','c','d']) 
d, d2 = d.align(d2, fill_value=0) 
sum_df = d + d2 

In [23]: d 
Out[23]: 
    a b c d 
0 1 2 4 0 
1 1 6 5 0 
2 1 8 7 0 

In [24]: d2 
Out[24]: 
    a b c d 
0 1 2 4 9 
1 1 6 5 7 
2 1 8 7 10 

In [25]:sum_df 
Out[25]: 
    a b c d 
0 2 4 8 9 
1 2 12 10 7 
2 2 16 14 10