通过在 pandas 中切片来更改系列中的行的最快方法?

Fastest way to changes rows in a Series by slicing in pandas?

我在 pandas 中有一个大型系列数据结构,我需要使用切片来编辑某些值。我从以下代码开始:

import numpy as np
import pandas as pd

vec = np.random.randn(1e7)
sr  = pd.Series(vec)
idx = (np.random.rand(10000)*1000).astype(int)

使用 idx 替换 vec 中的元素要快得多

timeit vec[idx] = 1.2
10000 loops, best of 3: 32.5 µs per loop

比 pandas 结构

timeit sr[idx] = 1.2
1 loops, best of 3: 391 µs per loop

timeit sr.iloc[idx] = 1.2
1000 loops, best of 3: 201 µs per loop

对于此特定操作,pandas 有没有办法获得与 numpy 相同的性能?

sr.values[idx] = 1.2 的性能与 vec[idx] = 1.2:

相当
In [101]: %timeit vec[idx] = 1.2
10000 loops, best of 3: 25.8 µs per loop

In [102]: %timeit sr.values[idx] = 1.2
10000 loops, best of 3: 27.3 µs per loop