我有一个熊猫数据框,如下所示:
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)
任何帮助将不胜感激。谢谢
答案 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