DataFrame rolling apply 多列 return 多列

如题所述

在编写向量化回测的过程中,我遇到了一个特定问题:使用 pandas DataFrame 的 rolling 后的 apply 只能处理单列,即使尝试以 lambda 的方式传递多列参数,也难以返回多列结果。同时,将 apply 函数内部的 DataFrame 转换为直接操作外部 DataFrame 的方式,虽然可行,但操作过程并不直观,且效率可能不高。

针对这一问题,我参考了 StockOverFlow 上的解决方案,并进行了一定程度的修改。在滚动操作中,默认 min_periods 和 window 参数的设置会影响结果的输出。此外,需要注意的是,传入 apply 函数的 DataFrame 包含多级索引。

通过实际测试,滚动平均与数据相加的复合操作的执行结果如下:

原始数据如下:

...数据省略...

处理后结果如下:

...数据省略...

对比发现,尽管滚动操作与 concat 操作的速度表现存在差异,但实际执行效率并不理想,特别是在涉及多级索引和大型数据集时,pandas 的操作效率较低。

为优化性能,我尝试使用纯 numpy 操作替代 pandas 的 concat 操作,结果在速度上取得了显著提升。该方法将数据处理过程转换为 numpy 二维矩阵的高效 slice 操作,从而实现更快的执行速度。

总结,通过采用 numpy 操作,特别是利用 numpy 的 stride 功能,能够显著提升数据处理效率。关键在于理解 numpy 数据在内存中的连续存储方式,以及如何利用 stride 优化数据访问。在 numpy 操作中,执行 slice 操作可直接对原始数组进行高效操作,避免了内存拷贝等低效操作,从而实现了高效数据处理。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜