多索引DataFrame中子集数据高效修改的最优方法探究
更快修改多索引DataFrame子集的方法
针对你遇到的多索引DataFrame修改子集的性能问题,推荐以下两种更高效的写法,性能接近你提到的第一种快速方法,同时适配第二个维度大小不固定的场景:
方法1:元组+slice(None)直接定位
利用多索引的层级匹配规则,直接指定第一个层级为目标值,第二个层级匹配所有元素:
%%timeit df.loc[(0, slice(None)), 'C'] = 1. # 测试结果示例:920 µs ± 85 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
方法2:使用pd.IndexSlice提升可读性
如果多索引层级较多,用IndexSlice可以让代码更清晰,本质和方法1一致:
import pandas as pd idx = pd.IndexSlice %%timeit df.loc[idx[0, :], 'C'] = 1. # 性能和方法1几乎无差异
为什么这两种方法更快?
这两种写法都是直接通过多索引的层级定位逻辑筛选数据,不需要像get_level_values那样先提取层级值、生成布尔索引再筛选,避免了额外的序列计算开销,因此性能大幅优于你当前使用的布尔索引方法,同时完全适配第二个维度大小不固定的场景。
内容的提问来源于stack exchange,提问作者stevew
相关产品推荐
相关产品推荐

