2017-06-14 5 views
2

Ich habe folgende Datenrahmen ersetzen:Pandas Spaltenwert unter der Bedingung

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

Und ich möchte die Spalte B auf den Wert von C jedes Mal ändern, die C unterscheidet sich von NaT ist. Das Endergebnis wäre die folgende:

enter image description here

Antwort

2

Verwendung 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 

Und wenn Bedarf 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 

Oder mask mit notnull:

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 

Oder 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 
Verwandte Themen