Pandas 在条件下替换列值

Pandas 在条件下替换列值,pandas,replace,Pandas,Replace,我有以下数据帧: df = pd.DataFrame({'A' : [1., 2., 3., 4.], 'B' : [4., 3., 2., 1.], 'C' : [pd.NaT,8,pd.NaT,0]}) df 每当C与NaT不同时,我想把B列改为C的值。最终结果如下: pd.Series.fillna df.B = df.C.fillna(df.B) df A B C 0 1.0 4.0 NaT 1 2.0 8.0 8 2 3.0 2.0 N

我有以下数据帧:

df = pd.DataFrame({'A' : [1., 2., 3., 4.], 'B' : [4., 3., 2., 1.], 'C' : [pd.NaT,8,pd.NaT,0]})
df

每当C与NaT不同时,我想把B列改为C的值。最终结果如下:


pd.Series.fillna

df.B = df.C.fillna(df.B)
df

     A    B    C
0  1.0  4.0  NaT
1  2.0  8.0    8
2  3.0  2.0  NaT
3  4.0  0.0    0

pd.DataFrame.where

df.B = df.B.where(df.C.isnull(), df.C).astype(df.B.dtype)
df

     A    B    C
0  1.0  4.0  NaT
1  2.0  8.0    8
2  3.0  2.0  NaT
3  4.0  0.0    0
使用:

如果需要
float
s:

df['B'] = df['C'].combine_first(df['B']).astype(df['B'].dtype)
print (df)
     A    B    C
0  1.0  4.0  NaT
1  2.0  8.0    8
2  3.0  2.0  NaT
3  4.0  0.0    0
或与:

或:

df['B'] = df['C'].combine_first(df['B']).astype(df['B'].dtype)
print (df)
     A    B    C
0  1.0  4.0  NaT
1  2.0  8.0    8
2  3.0  2.0  NaT
3  4.0  0.0    0
df['B'] = df['B'].mask(df['C'].notnull(), df['C'])
print (df)
     A  B    C
0  1.0  4  NaT
1  2.0  8    8
2  3.0  2  NaT
3  4.0  0    0
df['B'] = np.where(df['C'].notnull(), df['C'], df['B'])
print (df)
     A  B    C
0  1.0  4  NaT
1  2.0  8    8
2  3.0  2  NaT
3  4.0  0    0