在进行熊猫比较时,如何从 np.nan>np.nan 返回 np.nan?

Her*_*ini 3 python comparison nan dataframe pandas

我有以下两个数据帧:

a = pd.DataFrame([[1,2, 3],[4,3,6], [np.nan, 2, np.nan]])
     0  1    2
0  1.0  2  3.0
1  4.0  3  6.0
2  NaN  2  NaN
Run Code Online (Sandbox Code Playgroud)

b = pd.DataFrame([[0,1,3],[5,3,5 ],[np.nan, np.nan, np.nan]])
     0    1    2
0  0.0  1.0  3.0
1  5.0  3.0  5.0
2  NaN  NaN  NaN
Run Code Online (Sandbox Code Playgroud)

a>b 的比较结果:

       0      1      2
0   True   True  False
1  False  False   True
2  False  False  False
Run Code Online (Sandbox Code Playgroud)

但是,我希望输出如下所示:

     0      1      2
0   True   True  False
1  False  False   True
2   nan    nan     nan
Run Code Online (Sandbox Code Playgroud)

的比较2>np.nannp.nan>np.nan都应该导致np.nan。(或任何其他随机值,与 True 和 False 不同)

任何事情都会有所帮助!

WeN*_*Ben 5

我们需要添加一个 mask

yourdf=a.gt(b).mask(a.isna()|b.isna(),'nan')
Out[153]: 
       0      1      2
0   True   True  False
1  False  False   True
2    nan    nan    nan
Run Code Online (Sandbox Code Playgroud)

  • 只是指出,这仍然可以用 `a > b` 编写,但需要括号(有些 linter 不会喜欢它): `(a > b).mask(a.isna() | b.isna (), '南')` (2认同)