假设我有以下两个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,其中不匹配索引处的元素应简单地从s1s2“继承”,而无需更改。因此结果应如下所示:

>>> 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,却没有找到任何答案。非常感谢您的任何建议!

最佳答案

我认为一种方法是使用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似乎不太适合我。

关于python - 添加两个 Pandas 系列,同时将(非数字)值保留在不匹配的索引处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23658092/

10-10 22:30