代码之家  ›  专栏  ›  技术社区  ›  Bill

从另一个熊猫系列中减去一个熊猫系列,而不为缺失的数据创建NaN值

  •  4
  • Bill  · 技术社区  · 7 年前

    从一个序列减去另一个序列时,如果第二个序列中没有要减去的记录,则结果将包含NaN。

    In [1]: import pandas as pd
    
    In [2]: a = pd.Series({1: 100, 2: 102, 3: 103, 4: 104})
    
    In [3]: a
    Out[3]:
    1    100
    2    102
    3    103
    4    104
    dtype: int64
    
    In [4]: b = pd.Series({1: 5, 3: 7})
    
    In [5]: a - b
    Out[5]:
    1    95.0
    2     NaN
    3    96.0
    4     NaN
    dtype: float64
    

    假设缺失数据等于零,有没有更简单的方法进行减法?除了像这样手动插入零之外:

    In [15]: b_dash = pd.Series(b, index=a.index).fillna(0.0)
    
    In [16]: a - b_dash
    Out[16]:
    1     95.0
    2    102.0
    3     96.0
    4    104.0
    dtype: float64
    
    2 回复  |  直到 7 年前
        1
  •  8
  •   BENY    7 年前

    使用 sub

    a.sub(b,fill_value=0)
    Out[213]: 
    1     95.0
    2    102.0
    3     96.0
    4    104.0
    dtype: float64
    
        2
  •  2
  •   cmaher MSeifert    7 年前

    或者,您可以执行减法,然后 fillna 使用基本系列(在这种情况下 a ):

    (a-b).fillna(a)
    
    # 1     95.0
    # 2    102.0
    # 3     96.0
    # 4    104.0
    

    或者,您可以使用 pd.Series.update (将修改 与索引匹配的位置 a-b ):

    a.update(a-b)
    
    # 1     95
    # 2    102
    # 3     96
    # 4    104