2017-07-26 41 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