首页 > 解决方案 > 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 替换为该行中金额字段的值,并将零保留原样。输出应如下所示

   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)

任何帮助将非常感激。谢谢

标签: pythonpandas

解决方案


让我们使用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

推荐阅读