Reputation: 1167
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
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
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
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