在熊猫数据框中替换值

问题描述 投票:2回答:1

我有一个数据框(名为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

我想用其索引值替换所有这些。

最终结果应如下所示:

    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

这只是一个示例。实际的数据框具有数千行和数千列。优先考虑的是拥有高效的代码,以尽可能快地修改数据。

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

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

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

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

哪个是最省时的方式?

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

谢谢

python pandas numpy dataframe editing
1个回答
5
投票

您可以使用mask

df.mask(df.eq(1), df.index)

输出:

   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

如果该样本中的索引为数字,则也可以:

df.mul(df.index, axis=0)

0
投票

我们也可以使用lambda

df.where(df.eq(0), lambda x: x.index)

   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
© www.soinside.com 2019 - 2024. All rights reserved.