Pandas 替换为另一行的值

Dae*_*017 2 python replace numpy series pandas

我有一张桌子:

目的 第 1 列 第2栏 第3栏 第4栏
参考 10 14 7 29
对象1 0 9 1 30
对象2 1 16 0 17 号
对象3 9 21 3 0
对象4 11 0 4 22

我想按条件对其进行转换:如果任何单元格(第一行的单元格除外)=0,则必须将其替换为该列第一行中递增的 (X+1) 值。

结果表是:

目的 第 1 列 第2栏 第3栏 第4栏
参考 10 14 7 29
对象1 11 9 1 30
对象2 1 16 8 17 号
对象3 9 21 3 30
对象4 11 15 4 22

我尝试过这个变体:

df = np.where(df[df == 0] == 0, df.iloc[0] + 1, df)
Run Code Online (Sandbox Code Playgroud)

但结果是ndarray,不是DataFrame,而且性能不够好。

有没有办法只使用 pandas 的 utils 来做到这一点?

jez*_*ael 5

使用DataFrame.mask

out = df.mask(df == 0, df.iloc[0] + 1, axis=1)
print (out)
           Col1  Col2  Col3  Col4
Object                           
reference    10    14     7    29
Obj1         11     9     1    30
Obj2          1    16     8    17
Obj3          9    21     3    30
Obj4         11    15     4    22
Run Code Online (Sandbox Code Playgroud)

  • 除此之外,您还可以使用“df.where(df != 0, df.iloc[0] + 1, axis=1)”。它给出了相同的结果。但是,“df.mask()”在这里似乎更直观,因为如果条件为真(df == 0),它会更新值,而“df.where()”如果条件为假(如果 df != 0 为 False 然后更新)。 (2认同)