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

Python 熊猫:根据条件按行替换值,python,pandas,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替换为该行中amount字段的值,并保持零不变。输出应该如下所示 amount 1 2 3 4 0 5 5 5 5 5 1 7

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

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字段的值,并保持零不变。输出应该如下所示

   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)
任何帮助都将不胜感激。谢谢

让我们使用面具:

输出:

   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
让我们用面具:

输出:

   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
您也可以通过以下方法完成:

>>> 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
您也可以通过以下方法完成:

>>> 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

只需乘法:0返回0,1返回金额值:df.drop'amount',1.muldf['amount',axis=0但我遇到了错误。请提供完整的错误消息,以及。除此之外,为什么使用0/1而不是实际的布尔值?只需乘以:0返回0,1返回金额值:df.drop'amount',1.muldf['amount',axis=0但我遇到了错误请提供完整的错误消息,以及。撇开Asn不谈,为什么使用0/1而不是实际的布尔值?对于更一般的情况,可以使用df2.maskdf2!=0,df2['amount'],axis=0对于更一般的情况,可以使用df2.maskdf2!=0,df2['amount'],轴=0