如何通过Pandas .loc访问器从DatetimeIndex获取对应切片的布尔掩码
获取时间切片对应布尔掩码的高效方法
当然有高效的方法啦!给你整理几个实用又快速的方案:
直接用索引做时间范围比较(最推荐)
pandas的DatetimeIndex天生支持向量化的时间比较,这是效率最高的方式,完全贴合你的需求:mask = (df.index >= '2011-01-02') & (df.index < '2011-01-03')生成的
mask就是你要的布尔数组,和df.loc["2011-01-02",:]的筛选范围完全一致,底层是向量化运算,速度拉满。用
isin匹配目标时间点
如果需要更灵活的时间范围,你可以先生成目标日期的所有小时级索引,再用isin生成掩码:target_hours = pd.date_range('2011-01-02', periods=24, freq='H') mask = df.index.isin(target_hours)这个方法逻辑很直观,但数据量特别大的时候,性能会比第一种稍弱一点,因为涉及集合匹配。
归一化索引后匹配日期
要是你只需要筛选某一天的所有数据,还可以把索引的时间部分归一化到0点,再和目标日期比较:mask = df.index.normalize() == pd.Timestamp('2011-01-02')这种方法代码简洁,效率也不错,适合只按日期筛选的场景。
内容的提问来源于stack exchange,提问作者brorfred
相关产品推荐
相关产品推荐

