我想在数据框中为每行的最后一列中找到的值更改零值。我可以在列或行中使用for来解决这个问题,但它对我来说似乎不太过pythonic。
简而言之,我有一个这样的数据框:
col1 col2 col3 nonzero
1 2 0 10
1 0 3 20
我想做一个像
这样的操作df[df==0] = df.nonzero
所以我得到了
col1 col2 col3 nonzero
1 2 10 10
1 20 3 20
然而这不起作用,因为[df == 0]是具有True / False值的DataFrame本身。怎么办呢?
答案 0 :(得分:1)
一种选择是使用apply
方法,循环遍历数据框的行,并将零替换为行的最后一个元素:
df.apply(lambda row: row.where(row != 0, row.iat[-1]), axis=1)
您还可以修改数据框:
df[df == 0] = (df == 0).mul(df.nonzero, axis=0)
上面的结果与df
相同。在此方法中,(df == 0).mul(df.nonzero, axis=0)
创建一个数据框,其中零条目由非零列中的值替换,其他条目为零;结合布尔索引和赋值,您可以有条件地修改原始数据框中的零条目:
(df == 0).mul(df.nonzero, axis=0)