我有一个数据框(名为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内置函数来修改数据。
哪个是最省时的方式?
还有其他更有效的方法,我还没想到吗?
谢谢
您可以使用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)
我们也可以使用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