假设我有以下两个pandas.Series
个对象:
>>> s1 = Series([1, True, 3, 5], index=['a', 'b', 'c', 'e'])
>>> s2 = Series([100, 300, 'foo', 500], index=['a', 'c', 'd', 'e'])
>>> s1
a 1
b True
c 3
e 5
dtype: object
>>> s2
a 100
c 300
d foo
e 500
dtype: object
我想计算总和s1+s2
,其中非匹配索引处的元素应该只是从s1
或s2
“继承”而不做任何更改。所以结果应该是这样的:
>>> Series([101, True, 303, 'foo', 505], index=['a', 'b', 'c', 'd', 'e'])
a 101
b True
c 303
d foo
e 505
dtype: object
天真的方法不起作用,因为它在不匹配的索引处引入了NaN
:
>>> s1 + s2
a 101
b NaN
c 303
d NaN
e 505
dtype: object
StackOverflow上有类似的问题提出了s1.add(s2, fill_value=0)
的解决方案,但这在我的案例中不起作用,因为并非所有值都是数字,所以fill_value
没有用。有没有一个选项告诉大熊猫只是填写他们所在的系列中的缺失值?
这似乎是一件显而易见的事情,我肯定会遗漏一些东西,但我一直在搜索文档和StackOverflow并且没有找到任何答案。非常感谢任何建议!
答案 0 :(得分:3)
我认为使用combine_first
的一种方式是:
>>> s1 = pd.Series([1, True, 3, 5], index=['a', 'b', 'c', 'e'])
>>> s2 = pd.Series([100, 300, 'foo', 500], index=['a', 'c', 'd', 'e'])
>>> (s1+s2).combine_first(s1).combine_first(s2)
a 101
b True
c 303
d foo
e 505
dtype: object
但说实话,Series
这种类型不同似乎不常出现在我身上。