【问题标题】:Adding pandas Series with different indices without getting NaNs添加具有不同索引的熊猫系列而不获取 NaN
【发布时间】:2012-09-20 00:02:13
【问题描述】:

我正在尝试在 pandas 中做我认为是直截了当的操作,但我似乎无法让它发挥作用。

我有两个具有不同索引数量的熊猫系列,如果它们共享一个索引,我想将值加在一起,否则我只想传递没有对应索引的值。

例如

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 或Sr1.add(Sr2) 给予

A     6
B   NaN
C     9
D   NaN

但我想要的是

A     6
B     2
C     9
D     4

其中 Sr1 的 B 和 D 值只是被传递。

有什么建议吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以使用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
    

    【讨论】:

    • 互补运算为 Sr1.subtract(Sr2, fill_value=0)
    【解决方案2】:
    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)
    

    使用 fillna 的另一种方法。当索引不匹配时,它适用于所有情况

    【讨论】:

      【解决方案3】:

      使用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
      

      【讨论】:

        猜你喜欢
        • 2018-09-17
        • 2018-12-25
        • 2018-10-07
        • 2017-12-23
        • 2023-03-26
        • 2015-09-20
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多