You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame中高效将未来收益率与当期因子按permno匹配?

你当前的循环方案性能差是因为逐分组的Python层循环存在大量冗余的索引定位、切片开销,针对面板数据的分组位移需求,直接使用Pandas内置的向量化操作即可,性能可以提升数个量级。

操作步骤

  1. 先确保数据已经按permno、year、month升序排序,保证每个股票的时间序列顺序正确:
double_sorted = double_sorted.sort_values(by=['permno', 'year', 'month']).reset_index(drop=True)
  1. 直接用groupby+shift生成下一期收益率列,shift(-1)表示将组内序列向上偏移1位,刚好将下一期的收益率匹配到当期行:
double_sorted['rt+1'] = double_sorted.groupby('permno')['ret'].shift(-1)

说明

  • 该逻辑和你手写循环的效果完全一致:每个permno分组内,当期行的rt+1取下一期的ret值,每个分组最后一期的rt+1会自动赋值为NaN,不需要提前初始化空列。
  • 直接按列名赋值的方式比你原来按列位置(第12位索引)赋值的鲁棒性更高,不会因为后续列的增减出现错位问题。
  • Pandas的groupby和shift都是底层C语言实现的向量化操作,避免了Python层循环的开销,即便面对百万级甚至千万级的金融面板数据,也可以在秒级完成计算。

内容的提问来源于stack exchange,提问作者ts10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:27:04