Skip to main content
 首页 » 编程设计

python之向量化 2 参数 .loc 更新的最快方法是什么

2025年05月04日20youxin

假设我有以下数据框:

import pandas as pd 
df = pd.DataFrame({'n': [1, 2, 3], 'm': [4, 4, 7]}) 
df.loc[df['m']==4,'n']=1 

在相对较小的数据集(约 50,000 个 int32 样本)上运行此 .loc 函数需要 11 毫秒。有什么办法可以加快速度吗?我希望将相同的操作缩短到 10-100μs 之间。

更新

我对上面的示例进行了编辑,使其更加简洁。

测试建议的方法后,最快的是:

df['n'].values[df['m'].values == 4] = 1

将其应用于约 50,000 个样本数据集后,此解决方案的运行速度比原始代码快 244 倍。

请您参考如下方法:

你可以使用 np.where一个更有效的解决方案:

df = pd.DataFrame({'numbers': np.random.choice(range(5), 100_000),  
                   'more_numbers': np.random.choice(range(5), 100_000)}) 
 
%timeit df.loc[df.more_numbers==4,'numbers']=1 
7.09 ms ± 658 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) 
 
%timeit np.where(df.more_numbers == 4, 1, df.numbers) 
547 µs ± 20.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each) 

所以你可以这样做:

df.numbers = np.where(df.more_numbers == 4, 1, df.numbers)