2015-02-09 9 views
5

Sto provando a sottrarre due DataFrames. Vorrei trattare i valori mancanti come 0. fillna() non funziona qui perché non so gli indici comuni prima di fare la sottrazione:Sottrai due DataFrames con indici non sovrapposti

import pandas as pd 

A = pd.DataFrame([1,2], index=['a','b']) 
B = pd.DataFrame([3,4], index=['a','c']) 
A - B 

    0 
a -2 
b NaN 
c NaN 

Idealmente, vorrei avere:

A - B 

    0 
a -2 
b 2 
c -4 

E 'possibile ottenere questo mantenendo il codice semplice?

risposta

5

È possibile utilizzare il metodo subtract e specificare un fill_value zero:

A.subtract(B, fill_value=0) 

Nota: il metodo seguito, combineAdd, is deprecated da 0.17.0 in poi.

Un modo è quello di utilizzare il metodo combineAdd aggiungere -B a A:

>>> A.combineAdd(-B) 
    0 
a -2 
b 2 
c -4 

Con questo metodo, si aggiungono i due DataFrames ed i valori a non corrispondenti indici default al valore sia A o B.