2016-10-14 278 views
2

考慮兩個dataframes:熊貓:合併兩個數據框列

df_a = pd.DataFrame([ 
     ['a', 1], 
     ['b', 2], 
     ['c', NaN], 
    ], columns=['name', 'value']) 

df_b = pd.DataFrame([ 
     ['a', 1], 
     ['b', NaN], 
     ['c', 3], 
     ['d', 4] 
    ], columns=['name', 'value']) 

所以看起來像

# df_a 
    name value 
0 a 1 
1 b 2 
2 c NaN 

# df_b 
    name value 
0 a 1 
1 b NaN 
2 c 3 
3 d 4 

我要與現有的合併這兩個dataframes並填寫value列的NaN值另一列中的值。換句話說,我想出來的:

# DESIRED RESULT 
    name value 
0 a 1 
1 b 2 
2 c 3 
3 d 4 

當然,我可以用自定義.map.apply做到這一點,但我想使用merge或類似的,而不是編寫自定義合併功能的解決方案。如何才能做到這一點?

回答

3

我認爲你可以使用combine_first

print (df_b.combine_first(df_a)) 
    name value 
0 a 1.0 
1 b 2.0 
2 c 3.0 
3 d 4.0 

或者fillna

print (df_b.fillna(df_a)) 
    name value 
0 a 1.0 
1 b 2.0 
2 c 3.0 
3 d 4.0 

update解決方案並不像combine_first那麼常見:

df_b.update(df_a) 
print (df_b) 
    name value 
0 a 1.0 
1 b 2.0 
2 c 3.0 
3 d 4.0 
+0

'combine_first'的偉大工程!謝謝。 但是,'fillna'&'update'不適用於外連接 - 兩者只會填充調用數據框中存在的值。例如,df_a.fillna(df_b)將「d」行解除。與'update'一樣。除非您可以對數據做出某些假設,否則它們不是一個通用的解決方案。 – tyleha