熊猫:根据条件按行替换值

时间:2020-03-22 17:10:30

标签: python pandas

我有一个熊猫数据框,如下所示:

df2
   amount  1  2  3  4
0   5      1  1  1  1
1   7      0  1  1  1
2   9      0  0  0  1
3   8      0  0  1  0
4   2      0  0  0  1

我想做的是将每一行的1替换为该行中的value字段的值,并保持原样的零。输出应该像这样

   amount  1  2  3  4
0   5      5  5  5  5
1   7      0  7  7  7
2   9      0  0  0  9
3   8      0  0  8  0
4   2      0  0  0  2

我尝试像这样逐行应用lambda函数,但遇到了错误

df2.apply(lambda x: x.loc[i].replace(0, x['amount']) for i in len(x), axis=1)

任何帮助将不胜感激。谢谢

2 个答案:

答案 0 :(得分:4)

让我们使用mask

df2.mask(df2 == 1, df2['amount'], axis=0)

输出:

   amount  1  2  3  4
0       5  5  5  5  5
1       7  0  7  7  7
2       9  0  0  0  9
3       8  0  0  8  0
4       2  0  0  0  2

答案 1 :(得分:1)

您也可以使用pandas.DataFrame.mul()方法执行此操作,如下所示:

>>> df2.iloc[:, 1:] = df2.iloc[:, 1:].mul(df2['amount'], axis=0)
>>> print(df2)
   amount  1  2  3  4
0       5  5  5  5  5
1       7  0  7  7  7
2       9  0  0  0  9
3       8  0  0  8  0
4       2  0  0  0  2