3 回答
TA贡献1817条经验 获得超14个赞
所以就这样做 values
%timeit df.values[df['more_numbers']==4,0]=1
10000 loops, best of 3: 127 µs per loop
%timeit df.loc[df['more_numbers']==4,'numbers']=1
1000 loops, best of 3: 692 µs per loop
TA贡献1805条经验 获得超9个赞
有很多方法。您可能希望考虑修改底层 NumPy 数组。但是,这不是记录在案或官方推荐的方法。
# Python 3.6.5, Pandas 0.19.2, NumPy 1.11.4
np.random.seed(0)
df = pd.DataFrame({'n': np.random.randint(0, 10, 10**5),
'm': np.random.randint(0, 10, 10**5)})
%timeit df.loc[df['m'] == 4, 'n'] = 1 # 1.3 ms
%timeit df['n'].values[df['m'].values == 4] = 1 # 436 µs
%timeit df['n'] = np.where(df['m'].values == 4, 1, df['n']) # 751 µs
%timeit df.iloc[df['m'].values == 4, df.columns.get_loc('n')] = 1 # 880 µs
%timeit df.loc[df['m'].values == 4, 'n'] = 1 # 1.12 ms
%timeit df['n'] = df['n'].mask(df['m'].values == 4, 1) # 1.34 ms
添加回答
举报