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

如何计算DataFrame中daily_return的滚动年初至今标准差?

计算DataFrame每行的年初至今(YTD)标准差

原始DataFrame结构

daily_return      year month day
date                                        
2018-12-27           NaN      2018    12  27
2018-12-28      1.020245      2018    12  28
2018-12-31      1.000650      2018    12  31
2019-01-02      1.020473      2019    01  02
2019-01-03      1.009129      2019    01  03
...                  ...       ...   ...  ..
2023-01-20      1.001087      2023    01  20
2023-01-23      0.998455      2023    01  23
2023-01-24      1.002491      2023    01  24
2023-01-25      1.004482      2023    01  25
2023-01-26      1.004953      2023    01  26

需求说明

需要为每行日期计算daily_return的年初至今(YTD)标准差,规则如下:

  • 行2018-12-31:计算2018年12月1日至31日期间的daily_return标准差,对应数据为[NaN, 1.020245, 1.000650]
  • 行2019-01-03:仅计算2019年1月1日至3日的daily_return标准差,对应数据为[1.020473, 1.009129]
  • 行2023-01-23:计算2023年1月1日至23日的所有daily_return标准差
  • 行2023-01-24:计算2023年1月1日至24日的所有daily_return标准差

已实现的相关功能

已通过以下代码实现月初至今(MTD)累积乘积:

df.groupby(['month', 'year'])['daily_return'].cumprod()

执行结果:

date
2018-12-27         NaN
2018-12-28    1.020245
2018-12-31    1.020909
2019-01-02    1.020473
2019-01-03    1.029789
                ...   
2023-01-20    0.999914
2023-01-23    0.998369
2023-01-24    1.000856
2023-01-25    1.005342
2023-01-26    1.010322

遇到的问题

尝试按年份分组计算标准差时,仅得到全年的整体标准差,而非每行对应的年初至今累积标准差:

df.groupby(['year'])['daily_return'].std()

执行结果:

year
2018    0.013856
2019    0.007128
2020    0.021325
2021    0.010358
2022    0.009854
2023    0.006444

解决方案

使用groupby结合expanding().std(),expanding()会对每个年份组内的数据进行累积计算,即从组内第一个数据到当前行的所有数据计算标准差:

df['ytd_std'] = df.groupby('year')['daily_return'].expanding().std().reset_index(level=0, drop=True)

结果说明

  • 对于2018-12-27:组内只有当前行的NaN,结果为NaN
  • 对于2018-12-28:组内有效数据仅1个,标准差为NaN
  • 对于2018-12-31:基于组内有效数据[1.020245, 1.000650]计算标准差
  • 后续年份的每行都会自动累积计算当年截至当前日期的daily_return标准差,完全符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:11:29