我每天有55年的时间序列。我找到了每年每个月的月平均值。现在,我要从该月和该年的相应天数中减去该月均值。
我的熊猫数据框如下:
0 1 2 3 ... 5 6 7 8
Date ...
1951-01-01 28.361 0.0 131.24 405.39 ... 405.39 38.284 0.187010 -1.23550
1951-01-02 27.874 0.0 113.74 409.56 ... 409.56 49.834 0.066903 -1.44770
... ... ... ... ... ... ... ... ...
2005-12-16 27.921 0.0 104.99 429.78 ... 429.78 47.529 -1.814300 -5.47720
2005-12-17 27.918 0.0 112.11 425.32 ... 425.32 46.541 -3.314000 -4.02050
我计算出每年每个月的平均值,如下所示:
0 1 2 ... 6 7 8
Date ...
1951-01-31 28.833387 0.000000 115.779677 ... 44.500613 -0.118354 -1.036190
1951-02-28 31.317429 0.000000 118.854179 ... 39.712607 0.802474 -2.443536
1951-03-31 34.550839 0.525103 86.424677 ... 43.239742 1.450830 -2.713229
... ... ... ... ... ... ...
2005-11-30 27.742767 12.357321 95.257233 ... 48.338700 -0.926430 0.250278
2005-12-31 28.171647 0.569575 106.816765 ... 43.437294 -0.998577 -1.632173
现在,我想将1951年1月的均值减去1951年1月的所有天,以此类推,整个时间序列都是如此。
我无法考虑如何进行。
答案 0 :(得分:1)
将GroupBy.transform
与DataFrame.sub
一起使用
#if neccesary
#df.index = pd.to_datetime(df.index)
df.sub(df.groupby([df.index.month,df.index.year]).transform('mean'))
df.sub(df.resample('M').transform('mean'))