2012-09-20 16 views
17

que estoy tratando de hacer lo que creo es una operación perversa recta de pandas, pero me parece que no puede hacer que funcione.pandas con diferentes índices sin conseguir NaNs

Tengo dos pandas de la serie con diferentes números de índices, me gustaría agregar valores juntos si comparten un índice, de lo contrario, me gustaría pasar los valores que no tienen los índices correspondientes.

Por ejemplo

Sr1 = pd.Series([1,2,3,4], index = ['A', 'B', 'C', 'D']) 
Sr2 = pd.Series([5,6], index = ['A', 'C']) 
Sr1  Sr2 
A  1 A  5 
B  2 C  6 
C  3 
D  4 

Sr1 + Sr2Sr1.add(Sr2) o hacerle

A  6 
B NaN 
C  9 
D NaN 

Pero lo que yo quiero es

A  6 
B  2 
C  9 
D  4 

donde los B y D valores para Sr1 se acaba de pasar el tiempo.

¿Alguna sugerencia?

Respuesta

38

Usted podría utilizar fill_value:

>>> import pandas as pd 
>>> Sr1 = pd.Series([1,2,3,4], index = ['A', 'B', 'C', 'D']) 
>>> Sr2 = pd.Series([5,6], index = ['A', 'C']) 
>>> Sr1+Sr2 
A  6 
B NaN 
C  9 
D NaN 
>>> Sr1.add(Sr2, fill_value=0) 
A 6 
B 2 
C 9 
D 4 
0

Una solución usando fillna():

>>> import pandas as pd 
>>> Sr1 = pd.Series([1, 2, 3, 4], index = ['A', 'B', 'C', 'D']) 
>>> Sr2 = pd.Series([5, 6], index = ['A', 'C']) 
>>> (Sr1 + Sr2).fillna(Sr1 + 0) 
A 6.0 
B 2.0 
C 9.0 
D 4.0 
Cuestiones relacionadas