替换熊猫数据框中的值

时间:2020-04-27 17:28:37

标签: python pandas numpy dataframe editing

我有一个数据框(名为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数组并对其进行循环。

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

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

哪种方式最省时?

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

谢谢

1 个答案:

答案 0 :(得分: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)