乘除法系列使nans保持为nans

时间:2019-05-12 19:57:09

标签: python pandas

我有3个系列:

value_column = pd.Series([1,np.NaN,3,4,5,6])
b = pd.Series([1,2,3,np.NaN,5,np.NaN])
c = pd.Series([1,2,3,np.NaN,5,np.NaN])

如果我像这样乘除它们,我得到:

Result = value_column.multiply(b, fill_value=1).divide(c, fill_value=1)
Result = pd.Series([1,1,3,4,5,6])

请注意上面的结果,第二个值是1而不是np.NaN。 下面是我需要的结果。

Result_I_need = pd.Series([1,np.NaN,3,4,5,6])

获得所需结果的一种方法是进行操作,然后添加以下行:

Result_I_need = np.where(value_column.isna(), np.NaN, Result_I_need)

但是似乎不是很专业。我怎样才能做到这一点?注意:fill_value = 1参数用于其他值组合。

2 个答案:

答案 0 :(得分:1)

IIUC添加combine_first

value_column.mul(b.div(c,fill_value=1)).combine_first(value_column)
0    1.0
1    NaN
2    3.0
3    4.0
4    5.0
5    6.0
dtype: float64

或使用where而不是np.where

将其压缩为一行
value_column.where(value_column.isna(),value_column.mul(b.div(c,fill_value=1),fill_value=1))
0    1.0
1    NaN
2    3.0
3    4.0
4    5.0
5    6.0
dtype: float64

答案 1 :(得分:1)

在计算之前,fillnabc怎么样:

value_column * b.fillna(1) / c.fillna(1)

Out[1058]:
0    1.0
1    NaN
2    3.0
3    4.0
4    5.0
5    6.0
dtype: float64