熊貓

2017-06-14 95 views
2
條件下

替換列值我有以下數據幀:熊貓

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

enter image description here

我想的B列更改爲C每次的值C是從不同的NaT。最終的結果將是以下幾點:

enter image description here

回答

2

使用combine_first

df['B'] = df['C'].combine_first(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 

如果需要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 

或者masknotnull

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 

或者numpy.where

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 
2

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