我有一个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
列的年初至今标准差。示例:
- 对于行“2018-12- 31”,结果将是从“2018-12-01”到“2018-12- 31”的
daily_return
的标准差:[钠氮,1.020245,1.000650]。 - 对于行“2019-01- 03”,我们引用的是"2019“年。因此,标准差应仅考虑从”2019-01-01“到当前行日期”2019-01- 03“的值:[一点零二零四七三,一点零零九一二九]
- 对于行[2023-01-23],结果应为从2023-01-01到2023-01-23的所有daily_returns
- 对于行[2023-01-24],结果应为从2023-01-01到2023-01-24的所有daily_returns...
我使用以下代码为Month-to-Date cumprod
做了类似的工作:
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
您可以看到它工作正常,因为对于每个日期,它都会给我本月至今的cumprod。
但是,每当我尝试按年分组并计算std
时,它只计算全年的std
,而不计算每行的年初至今的std
:
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
1条答案
按热度按时间zpgglvta1#
如果首先对索引进行排序,使行按正确顺序排列,则可以按年份分组,然后使用
expanding
窗口并应用.std()
函数: