有条件地从DataFrame中的另一列分配值

时间:2017-03-28 02:50:09

标签: python pandas

我想在数据框中为每行的最后一列中找到的值更改零值。我可以在列或行中使用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本身。怎么办呢?

1 个答案:

答案 0 :(得分:1)

一种选择是使用apply方法,循环遍历数据框的行,并将零替换为行的最后一个元素:

df.apply(lambda row: row.where(row != 0, row.iat[-1]), axis=1)

enter image description here

您还可以修改数据框:

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)

enter image description here