gpt4 book ai didi

python - 如何在 Python pandas 中使零除以零结果为零?

转载 作者:太空宇宙 更新时间:2023-11-03 14:57:26 25 4
gpt4 key购买 nike

我想在 Pandas 中将一个数据帧除以另一个数据帧以最终表示百分比变化。两个数据帧值都包含 NaN 和 0。现在,当我将一个数据帧除以另一个时,两个数据帧的值为零的结果是 NaN。我知道为什么 0/0 设置为 np.nan,但是从百分比变化的角度来看,我需要 0/0 为 0。

完成此任务最干净的方法是什么?

重现问题:

import pandas as pd
import numpy as np

data_with_zeros = pd.DataFrame({'a': [2, np.nan, 0, 3], 'b': [np.nan, 2, 0, 6]})

data_with_zeros['a'].div(data_with_zeros['b'], fill_value=0)

结果:

0         inf
1 0.0
2 NaN
3 0.5
dtype: float64

最佳答案

这是 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 可以用更直观的方式创建,就像这样 -

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

关于python - 如何在 Python pandas 中使零除以零结果为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41376510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com