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

Subtract one Pandas Series from another without creating NaN values for missing data

当您从一个系列中减去另一个系列时,如果第二个系列中没有要减去的记录,则结果包含 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

使用sub

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

或者,您可以执行减法,然后 fillna 使用您的基础系列(在本例中 a):

(a-b).fillna(a)

# 1     95.0
# 2    102.0
# 3     96.0
# 4    104.0

或者,您可以使用 pd.Series.update(这将在与 a-b 中的索引匹配的地方修改 a):

a.update(a-b)

# 1     95
# 2    102
# 3     96
# 4    104