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 内置函数来修改数据。
哪种方式最省时?
有没有其他更有效的方法,我还没有想到?
谢谢
你可以这样做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)