分别计算数据帧每年的累积值

use*_*827 1 python pandas

我有福尔。带有日期时间索引的 pandas 数据框:

datetime       VAL
2000-01-01   -283.0000
2000-01-02   -283.0000
2000-01-03    -10.6710
2000-01-04    -12.2700
2000-01-05    -10.7855
2001-01-06     -9.1480
2001-01-07     -9.5300
2001-01-08    -10.4675
2001-01-09    -10.9205
2001-01-10    -11.5715
Run Code Online (Sandbox Code Playgroud)

我想计算每年的累积值并用累积值替换 VAL 列。例如,它看起来像这样:

datetime       VAL
2000-01-01   -283.0000
2000-01-02   -283.0000 + -283.0000
2000-01-03    -10.6710 + -283.0000 + -283.0000
2000-01-04    -12.2700 + -10.6710 + -283.0000 + -283.0000
2000-01-05    -10.7855 + -12.2700 + -10.6710 + -283.0000 + -283.0000
2001-01-06     -9.1480
2001-01-07     -9.5300 + -9.5300
2001-01-08    -10.4675 + -10.4675
2001-01-09    -10.9205 + -10.9205
2001-01-10    -11.5715 + -11.5715
Run Code Online (Sandbox Code Playgroud)

我没有进行实际计算,这就是为什么你看到 -283.000 + -283.000 而不是 -566.0000

不知道如何继续,我可以做一个 groupby 然后呢?

DSM*_*DSM 5

.year您可以通过DateTimeIndex访问年份,并将其传递给groupby

>>> df["cumulative_VAL"] = df.groupby(df.index.year)["VAL"].cumsum()
>>> df
                 VAL  cumulative_VAL
datetime                            
2000-01-01 -283.0000       -283.0000
2000-01-02 -283.0000       -566.0000
2000-01-03  -10.6710       -576.6710
2000-01-04  -12.2700       -588.9410
2000-01-05  -10.7855       -599.7265
2001-01-06   -9.1480         -9.1480
2001-01-07   -9.5300        -18.6780
2001-01-08  -10.4675        -29.1455
2001-01-09  -10.9205        -40.0660
2001-01-10  -11.5715        -51.6375
Run Code Online (Sandbox Code Playgroud)