如何高效将全年分钟级测量数据聚合为小时级总和?
优化分钟级测量数据按小时求和的Python实现
问题根源
你当前的手动循环切片方法,在处理全年分钟级数据(约52万条记录)时,会产生大量的iloc切片和Python级循环操作,这是导致运行缓慢的核心原因——Python循环本身效率较低,且频繁的切片会额外消耗内存和计算资源。
高效解决方案
利用Pandas内置的resample方法,它是专门为时间序列重采样设计的优化工具,底层通过向量化操作实现,性能远优于手动循环。
优化后代码
import pandas as pd def aggregate_measurements(tvec, data, period): # 将时间序列转为datetime类型并设置为数据索引 indexed_data = data.copy() indexed_data.index = pd.to_datetime(tvec) if period == 'hour': # 按小时重采样并计算总和 hourly_data = indexed_data.resample('H').sum() # 提取结果 tvec_a = hourly_data.index.to_list() data_a = hourly_data.values.tolist() return tvec_a, data_a
核心优化点
- 消除Python循环:
resample采用Pandas底层的向量化计算,避免了逐段切片的循环开销,处理大数据集时速度提升显著。 - 利用时间索引:将时间列设为数据索引后,Pandas能直接基于时间维度高效分组,无需手动定位切片范围。
- 自动对齐时间:重采样会自动处理时间边界(比如整点对齐),无需手动取每组的第一个时间点。
额外优化提示
如果tvec本身已经是datetime类型的索引,可直接省略索引设置步骤,直接对data调用resample('H').sum(),进一步简化代码。
内容的提问来源于stack exchange,提问作者Seegert
相关产品推荐
相关产品推荐

