新的滚动平均值列,按一列分组并找到另一列的滚动平均值

时间:2021-05-18 11:04:11

标签: python pandas group-by mean rolling-computation

我有一个数据框 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

1 个答案:

答案 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。祝你好运!