有效地在其他列中按值替换值

Pet*_*ter 2 python dataframe pandas

如果该列中的值等于字符串,我试图将另一列替换为另一列.这个字符串的值是"wo".如果在y列中显示,则替换为x列.目前我使用以下代码:

df.y.replace("wo",df.x) 
Run Code Online (Sandbox Code Playgroud)

这种情况持续很长时间(数百万次观察,相当于几天的计算).

有更有效的替代方法吗?

以防万一,数据如下:

 y    x    other variables
 1    mo    something
 2    2     something
 3    3     something
 wo   >5    something
 4    4     something
 wo   7     something
Run Code Online (Sandbox Code Playgroud)

它必须看起来像:

 y    x    other variables
 1    mo    something
 2    2     something
 3    3     something
 >5   >5   something
 4    4     something
 7    7     something
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 5

试试这个:

df.loc[(df.y == 'wo'), 'y'] = df.x
Run Code Online (Sandbox Code Playgroud)

它将首先仅过滤那些行,df.y == 'wo'并将x列的值分配给'y'列

时间报告:

In [304]: %timeit df.y.replace("wo",df.x)
100 loops, best of 3: 13.9 ms per loop

In [305]: %timeit df.loc[(df.y == 'wo'), 'y'] = df.x
100 loops, best of 3: 3.31 ms per loop

In [306]: %timeit df.ix[(df.y == 'wo'), 'y'] = df.x
100 loops, best of 3: 3.31 ms per loop
Run Code Online (Sandbox Code Playgroud)

更新:从Pandas 0.20.1开始,.ix索引器已弃用,支持更严格的.iloc和.loc索引器.

  • 你有迹象表明这实际上加速了吗?如果确实如此,我认为它应该作为`pd`的`replace`方法的性能错误提交. (2认同)