2017-07-26 43 views
3

我有一個數據幀,例如 df = pd.DataFrame([[1,2,np.nan],[4,5, np.nan],[7,8,9]]) 所以這將是如何替換大熊貓數據幀列另一列B的值的基礎值

 sku r1 r2 
    0 1 2 NaN 
    1 4 5 NaN 
    2 7 8 9.0 

如果我想在R2上改變R1列的值的基礎上,我的意思是,如果R 2不是南,然後使用寄存器r2的值替換r1'value,否則保持R1沒有變化

那麼結果將是:

 sku r1 r2 
    0 1 2 NaN 
    1 4 5 NaN 
    2 7 9.0 9.0 

所以你看,在這個例子中第三種情況下將8更改爲9.0。 我是熊貓的新學習者,需要時間爲此尋找解決方案。

感謝您的幫助。

回答

3

您可以使用masknotnull

df['r1'] = df['r1'].mask(df['r2'].notnull(), df['r2']) 
print (df) 

    sku r1 r2 
0 1 2.0 NaN 
1 4 5.0 NaN 
2 7 9.0 9.0 

或者loc

df.loc[df['r2'].notnull(), 'r1'] = df['r2'] 
print (df) 
    sku r1 r2 
0 1 2.0 NaN 
1 4 5.0 NaN 
2 7 9.0 9.0 
1

使用np.where

df['r1'] = np.where(df['r2'].notnull(),df['r2'],df['r1']) 
df 

輸出:

sku r1 r2 
0 1 2.0 NaN 
1 4 5.0 NaN 
2 7 9.0 9.0