将数值 df 与布尔 df 相乘 => 错误乘法的结果 = np.nan 而不是零

Multiply numerical df with boolean df => result for False multiplication = np.nan instead of zero

将数值 df 与布尔 df 相乘时,显然 True 用作 1,False 用作 0。我想将所有与 False 相乘的值设置为 np.nan,以便它们不同于 0-初始数值 df 中的值。初始数值 df 中的 NaN 值当然保持 NaN 值。

期望输出:

   a    b    c
 NaN  0.0  3.0
 0.0  NaN  NaN
 9.0  NaN  NaN
 NaN  3.0  NaN

代码:

import pandas as pd
import numpy as np

df = pd.DataFrame({"a": [4,0,9,3],
                   "b": [0,7,np.nan,3],
                   "c": [3,7,np.nan,3]})

boolean = pd.DataFrame({"a": [False,True,True,False],
                        "b": [True,False,True,True],
                        "c": [True,False,False,False]})

output = df.mul(boolean)
print(output)
   a    b    c
 0.0  0.0  3.0
 0.0  0.0  0.0
 9.0  NaN  NaN
 0.0  3.0  0.0 => initial df zeros and zeros after boolean multiplication are mixed up

这应该有效

import pandas as pd
import numpy as np

df = pd.DataFrame({"a": [4,0,9,3],
                   "b": [0,7,np.nan,3],
                   "c": [3,7,np.nan,3]})

boolean = pd.DataFrame({"a": [False,True,True,False],
                        "b": [True,False,True,True],
                        "c": [True,False,False,False]})

boolean[boolean==0]=np.nan

output = df.mul(boolean)
print(output)