我有一张桌子:

Object Col1 Col2 Col3 Col4
reference 10 14 7 29
Obj1 0 9 1 30
Obj2 1 16 0 17
Obj3 9 21 3 0
Obj4 11 0 4 22

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

得到的表格是:

Object Col1 Col2 Col3 Col4
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

我试过这个变种:

df = np.where(df[df == 0] == 0, df.iloc[0] + 1, df)

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

有没有办法只用Pandas 的工具就能做到这一点呢?

推荐答案

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

Python相关问答推荐

具有多个选项的计数_匹配

使用SciPy进行曲线匹配未能给出正确的匹配

如何使用Python将工作表从一个Excel工作簿复制粘贴到另一个工作簿?

根据另一列中的nan重置值后重新加权Pandas列

Python json.转储包含一些UTF-8字符的二元组,要么失败,要么转换它们.我希望编码字符按原样保留

将图像拖到另一个图像

发生异常:TclMessage命令名称无效.!listbox"

根据二元组列表在pandas中创建新列

如何在python polars中停止otherate(),当使用when()表达式时?

我们可以为Flask模型中的id字段主键设置默认uuid吗

如何更改分组条形图中条形图的 colored颜色 ?

从一个系列创建一个Dataframe,特别是如何重命名其中的列(例如:使用NAs/NaN)

在极性中创建条件累积和

Odoo 16使用NTFS使字段只读

Python如何导入类的实例

read_csv分隔符正在创建无关的空列

在round函数中使用列值

迭代工具组合不会输出大于3的序列

如何通过函数的强式路径动态导入函数?

正则表达式反向查找