A Alstone
A Alstone

Reputation: 1167

Adding pandas Series with different indices without getting NaNs

I'm trying to do what I think is a straight froward operation in pandas but I can't seem to make it work.

I have two pandas Series with different numbers of indices, I would like to add values together if they share an index, otherwise I would just like to pass the values that don't have corresponding indices along.

For example

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 + Sr2 or Sr1.add(Sr2) give

A     6
B   NaN
C     9
D   NaN

But what I want is

A     6
B     2
C     9
D     4

where the B and D values for Sr1 are just passed along.

Any suggestions?

Upvotes: 35

Views: 20380

Answers (3)

kartik Garg
kartik Garg

Reputation: 91

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

Sr2 = pd.Series([5,6,7], index = ['A', 'C','E'])
(Sr1+Sr2).fillna(Sr2).fillna(Sr1)

An alternative approach using fillna. It will work on all cases when indeces do not match too

Upvotes: 9

Nafeez Quraishi
Nafeez Quraishi

Reputation: 6168

A solution using 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

Upvotes: 0

DSM
DSM

Reputation: 353019

You could use 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

Upvotes: 77

Related Questions