您应该能够使用下面的代码来实现您的目标。它计算每个月的平均值和标准差,然后使用Time 列执行lookup/merge:
from pandas.tseries.offsets import MonthEnd
previous_month = df["Time"].dt.normalize() - MonthEnd(1)
mu = df.groupby(pd.Grouper(key="Time", freq="M")).mean()
sigma = df.groupby(pd.Grouper(key="Time", freq="M")).std()
df = df.merge(
mu,
how="left",
left_on=previous_month,
right_index=True,
suffixes=("", "_prev_mean"),
)
df = df.merge(
sigma,
how="left",
left_on=previous_month,
right_index=True,
suffixes=("", "_prev_std"),
)
如果您的数据如下所示:
Time Value 1 Value 2 Value 3 Value 4
0 2021-01-01 01:37:49.148748 0.014568 0.041711 0.009694 0.047044
1 2021-01-01 03:29:24.939551 0.032042 0.073345 0.014901 0.051690
2 2021-01-01 06:00:53.871182 0.040758 0.105496 0.046904 0.073747
3 2021-01-01 16:59:30.672400 0.061262 0.113711 0.083658 0.073939
4 2021-01-02 01:36:59.195226 0.090762 0.115689 0.087191 0.081972
.. ... ... ... ... ...
495 2021-04-18 05:26:41.805694 10.883107 11.917340 12.850949 13.834590
496 2021-04-18 11:52:30.124759 10.889271 11.946243 12.860569 13.870959
497 2021-04-18 13:27:59.735432 10.932131 11.977409 12.949012 13.929994
498 2021-04-18 18:58:02.280739 10.979734 11.988028 12.952918 13.991210
499 2021-04-18 19:17:01.745781 10.997603 11.995105 12.991302 13.995131
[500 rows x 5 columns]
它看起来像这样:
Time Value 1 Value 2 Value 3 Value 4 Value 1_prev_mean Value 2_prev_mean Value 3_prev_mean Value 4_prev_mean Value 1_prev_std Value 2_prev_std Value 3_prev_std Value 4_prev_std
0 2021-01-01 01:37:49.148748 0.014568 0.041711 0.009694 0.047044 NaN NaN NaN NaN NaN NaN NaN NaN
1 2021-01-01 03:29:24.939551 0.032042 0.073345 0.014901 0.051690 NaN NaN NaN NaN NaN NaN NaN NaN
2 2021-01-01 06:00:53.871182 0.040758 0.105496 0.046904 0.073747 NaN NaN NaN NaN NaN NaN NaN NaN
3 2021-01-01 16:59:30.672400 0.061262 0.113711 0.083658 0.073939 NaN NaN NaN NaN NaN NaN NaN NaN
4 2021-01-02 01:36:59.195226 0.090762 0.115689 0.087191 0.081972 NaN NaN NaN NaN NaN NaN NaN NaN
.. ... ... ... ... ... ... ... ... ... ... ... ... ...
495 2021-04-18 05:26:41.805694 10.883107 11.917340 12.850949 13.834590 7.446702 8.458356 9.071314 9.948837 0.830943 0.961324 1.091647 1.102397
496 2021-04-18 11:52:30.124759 10.889271 11.946243 12.860569 13.870959 7.446702 8.458356 9.071314 9.948837 0.830943 0.961324 1.091647 1.102397
497 2021-04-18 13:27:59.735432 10.932131 11.977409 12.949012 13.929994 7.446702 8.458356 9.071314 9.948837 0.830943 0.961324 1.091647 1.102397
498 2021-04-18 18:58:02.280739 10.979734 11.988028 12.952918 13.991210 7.446702 8.458356 9.071314 9.948837 0.830943 0.961324 1.091647 1.102397
499 2021-04-18 19:17:01.745781 10.997603 11.995105 12.991302 13.995131 7.446702 8.458356 9.071314 9.948837 0.830943 0.961324 1.091647 1.102397
[500 rows x 13 columns]