如何从该月的每一天中减去一个月的平均值?

时间:2020-02-06 10:49:02

标签: python pandas dataframe

我每天有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月的所有天,以此类推,整个时间序列都是如此。

我无法考虑如何进行。

1 个答案:

答案 0 :(得分:1)

GroupBy.transformDataFrame.sub一起使用

#if neccesary
#df.index = pd.to_datetime(df.index)
df.sub(df.groupby([df.index.month,df.index.year]).transform('mean'))

Resampler.transform

df.sub(df.resample('M').transform('mean'))