替换 Pandas 数据框中的值

Arm*_*ver 2 python numpy editing dataframe pandas

我有一个数据框(名为 df),如下所示:

    s01  s03  s06  s07  s08
0   1    1    1    1    1
1   1    1    1    1    1
2   0    1    1    0    1
3   0    0    1    1    0
4   0    0    0    1    1
Run Code Online (Sandbox Code Playgroud)

我想用它的索引值替换所有的。

最终结果应如下所示:

    s01  s03  s06  s07  s08
0   0    0    0    0    0
1   1    1    1    1    1
2   0    2    2    0    2
3   0    0    3    3    0
4   0    0    0    4    4
Run Code Online (Sandbox Code Playgroud)

这只是一个示例。真实的数据框有数千行和数千列。首要任务是拥有一个能够尽快修改数据的高效代码。

我想到了 3 种可能的方法来解决这个问题:

  • 使用 2 个 'for' 循环和一个 'if' 语句并直接遍历 panda 对象或将数据转换为 2D numpy 数组并对其进行循环。

  • 在熊猫数据帧上使用某种熊猫内置过滤功能。

  • 将数据帧转换为 2D Numpy 数组并使用某种 numpy 内置函数来修改数据。

哪种方式最省时?

有没有其他更有效的方法,我还没有想到?

谢谢

Qua*_*ang 5

你可以这样做mask

df.mask(df.eq(1), df.index)
Run Code Online (Sandbox Code Playgroud)

输出:

   s01  s03  s06  s07  s08
0    0    0    0    0    0
1    1    1    1    1    1
2    0    2    2    0    2
3    0    0    3    3    0
4    0    0    0    4    4
Run Code Online (Sandbox Code Playgroud)

如果您的索引是本示例中的数字,您还可以执行以下操作:

df.mul(df.index, axis=0)
Run Code Online (Sandbox Code Playgroud)