将df中的val替换为布尔索引-pandas



我正在尝试使用逻辑运算符&替换pandas列中的值。使用下面的Label == AValue is == np.nan,我想用X替换Value。

import pandas as pd
import numpy as np
df = pd.DataFrame({      
'Time' : [1,1,2,2,3,3],    
'Label' : ['A','B','A','B','A','B'],
'x' : [-2.0,-1.0,-1.0,0.0,0.0,1.0],
'y' : [-2.0,-1.0,-2.0,-1.0,-2.0,-1.0],    
'Value' : [np.nan,np.nan,np.nan,np.nan,'Y',np.nan],          
})
df.loc[(df['Label'] == 'A') & (df['Value'] == np.nan), 'Value'] = 'X'

预期输出:

Time Label    x    y Value
0     1     A -2.0 -2.0     X
1     1     B -1.0 -1.0   NaN
2     2     A -1.0 -2.0     X
3     2     B  0.0 -1.0   NaN
4     3     A  0.0 -2.0     Y
5     3     B  1.0 -1.0   NaN

isna

np.nan的要点是它是NotAN编号。如果你像对待它一样对待它,你就会得到False。从设计上讲,它甚至不等于自己。

使用Pandasisna/notnaisnull/notnull

df.loc[(df['Label'] == 'A') & (df['Value'].isna()), 'Value'] = 'X'

然后你有

df

Time Label    x    y Value
0     1     A -2.0 -2.0     X
1     1     B -1.0 -1.0   NaN
2     2     A -1.0 -2.0     X
3     2     B  0.0 -1.0   NaN
4     3     A  0.0 -2.0     Y
5     3     B  1.0 -1.0   NaN

最新更新