我有一个数据框 df
日期 | 订单 | 组 |
---|---|---|
1/1/2021 00:00:00 | 20 | A |
1/1/2021 00:12:00 | 100 | B |
2/1/2021 00:00:00 | 24 | A |
2/1/2021 00:13:00 | 96 | B |
----- | --- | -- |
14/1/2021 | 34 | A |
14/1/2021 | 103 | B |
我想要一个新的“滚动平均值”列,以这种方式计算 2 周的订单平均值
日期 | 订单 | 组 | 滚动平均值 |
---|---|---|---|
1/1/2021 00:00:00 | 20 | A | NA 或 0 |
1/1/2021 00:12:00 | 100 | B | NA 或 0 |
2/1/2021 00:00:00 | 24 | A | NA 或 0 |
2/1/2021 00:13:00 | 96 | B | Na 或 0 |
----- | --- | -- | |
14/1/2021 00:00:00 | 34 | A | 29 |
14/1/2021 00:00:00 | 103 | B | 101 |
答案 0 :(得分:0)
这对我有用:
df['Rolling Mean'] = df['Orders'].rolling(window=pd.Timedelta(days=14)).mean()
请注意,min_periods
方法中的 pd.rolling()
参数采用整数,并且不容易处理时间序列,因此您需要使用以下内容覆盖新滚动平均值列的前 14 天np.nan
作为第二步,如果您不希望那里有任何值,直到至少有 14 天的平均值。这可以通过以下方式实现:
# find integer number of time periods in first 14 days.
delay = len(df.loc[:(df.index[0]+pd.Timedelta(days=14))])
# set all means to `NaN` in those time steps.
df.iloc[:delay] = np.nan
此答案假定日期列是您的索引列,并且您已将 numpy
安装为 np
,因此您可以调用 np.nan
。祝你好运!