我有一个数据框(名为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内置函数来修改数据。
哪种方式最省时?
还有其他更有效的方法吗?我没想到吗?
谢谢
答案 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)