如何根据另一列B的值替换pandas dataframe列的值

时间:2017-07-26 13:32:48

标签: python pandas dataframe

例如,我有一个数据框 df = pd.DataFrame([[1,2,np.nan],[4,5,np.nan],[7,8,9]]) 所以它会是

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

如果我想在r2上更改r1列的值,我的意思是如果r2不是Nan,那么使用r2的值替换r1'值,否则保持r1没有变化

结果将是:

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

所以你看,在这个例子中,在第三种情况下将8改为9.0。 我是大熊猫的新学习者,我花了很多时间为此找到解决方案。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您可以mask使用notnull

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 :(得分: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