寻找更优的pandas DataFrame按分钟切片迭代处理方法
你使用的自定义函数完全可以和groupby搭配使用,只要函数满足「输入为Series、输出为单个标量」的要求,就可以直接传给agg方法,无需手动写循环切片,优化后的实现如下:
基础实现(仅返回有数据的分钟结果)
# 按秒数生成分组标签:1-60秒归为第0组,61-120秒归为第1组,直到541-600秒归为第9组,共10个分组 output = df.groupby((df['seconds'] - 1) // 60)['input'].agg(realized_volatility).tolist()
补全空分钟的实现(无数据的分钟对应位置填充nan)
如果需要保证output固定为10个元素,哪怕某分钟没有任何数据也保留对应位置的空缺值,可以增加reindex步骤:
import numpy as np output = ( df.groupby((df['seconds'] - 1) // 60)['input'] .agg(realized_volatility) .reindex(range(10), fill_value=np.nan) .tolist() )
优势说明
- 代码更简洁,无需手动维护切片变量和循环逻辑
- 性能远高于手动循环切片,
groupby底层为向量化实现,数据量越大优势越明显
内容的提问来源于stack exchange,提问作者Straken
相关产品推荐
相关产品推荐

