这是使用dataframe.where method的方法-
mask = (data_with_zeros[['a','b']].values == [0,0]).all(1)
data_with_zeros['a'].div(data_with_zeros['b'], fill_value=0).where(~mask,0)
另外,也可以用更直观的方式创建蒙版,例如-
mask = (data_with_zeros.a == 0) & (data_with_zeros.b == 0)
样品运行-
情况1:
In [66]: data_with_zeros
Out[66]:
a b
0 2.0 NaN
1 NaN 2.0
2 0.0 0.0
3 3.0 6.0
In [67]: mask = (data_with_zeros.a == 0) & (data_with_zeros.b == 0)
In [68]: data_with_zeros['a'].div(data_with_zeros['b'], fill_value=0).where(~mask,0)
Out[68]:
0 inf
1 0.000000
2 0.000000
3 0.500000
dtype: float64
情况2:
In [70]: data_with_zeros
Out[70]:
a b
0 2.0 0.0
1 NaN 2.0
2 0.0 0.0
3 3.0 6.0
In [71]: mask = (data_with_zeros.a == 0) & (data_with_zeros.b == 0)
In [72]: data_with_zeros['a'].div(data_with_zeros['b'], fill_value=0).where(~mask,0)
Out[72]:
0 inf
1 0.000000
2 0.000000
3 0.500000
dtype: float64