我有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参数用于其他值组合。
答案 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)
在计算之前,fillna
至b
,c
怎么样:
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