替换 Pandas 数据框中的值
Replacing values in a Pandas Dataframe
我有一个数据框(名为 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' 语句并直接遍历 panda 对象或将数据转换为 2D numpy 数组并遍历它。
在 pandas 数据帧上使用某种 pandas 内置过滤功能。
将数据帧转换为二维 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)
我有一个数据框(名为 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' 语句并直接遍历 panda 对象或将数据转换为 2D numpy 数组并遍历它。
在 pandas 数据帧上使用某种 pandas 内置过滤功能。
将数据帧转换为二维 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)