首页 > 解决方案 > 新的滚动平均值列,按一列分组并找到另一列的滚动平均值

问题描述

我有一个数据框 df

日期 订单 团体
2021 年 1 月 1 日 00:00:00 20 一个
2021 年 1 月 1 日 00:12:00 100
2/1/2021 00:00:00 24 一个
2/1/2021 00:13:00 96
----- --- --
2021 年 14 月 1 日 34 一个
2021 年 14 月 1 日 103

我想要一个新列“滚动平均值”,以这种方式获取 2 周的订单平均值

日期 订单 团体 滚动平均值
2021 年 1 月 1 日 00:00:00 20 一个 不适用或 0
2021 年 1 月 1 日 00:12:00 100 不适用或 0
2/1/2021 00:00:00 24 一个 不适用或 0
2/1/2021 00:13:00 96 钠或 0
----- --- --
14/1/2021 00:00:00 34 一个 29
14/1/2021 00:00:00 103 101

标签: pythonpandasgroup-bymeanrolling-computation

解决方案


这对我有用:

df['Rolling Mean'] = df['Orders'].rolling(window=pd.Timedelta(days=14)).mean()

请注意,min_periods该方法中的参数pd.rolling()采用整数并且不能轻松处理时间序列,因此np.nan如果您不希望有第二步,则需要覆盖新的 Rolling Mean 列的前 14 天那里的任何值,直到平均至少有 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. 祝你好运!


推荐阅读