新的滚动平均值列,按一列分组并找到另一列的滚动平均值
Posted
技术标签:
【中文标题】新的滚动平均值列,按一列分组并找到另一列的滚动平均值【英文标题】:New rolling mean column which group by one column and find rolling mean of another column 【发布时间】:2021-08-07 14:46:01 【问题描述】:我有一个数据框 df
Date | Orders | Group |
---|---|---|
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 周的订单平均值
Date | Orders | Group | Rolling Mean |
---|---|---|---|
1/1/2021 00:00:00 | 20 | A | NA or 0 |
1/1/2021 00:12:00 | 100 | B | NA or 0 |
2/1/2021 00:00:00 | 24 | A | NA or 0 |
2/1/2021 00:13:00 | 96 | B | Na or 0 |
----- | --- | -- | |
14/1/2021 00:00:00 | 34 | A | 29 |
14/1/2021 00:00:00 | 103 | B | 101 |
【问题讨论】:
【参考方案1】:这对我有用:
df['Rolling Mean'] = df['Orders'].rolling(window=pd.Timedelta(days=14)).mean()
请注意,pd.rolling()
方法中的 min_periods
参数采用整数并且不容易处理时间序列,因此您需要使用 np.nan
覆盖新滚动平均值列的前 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
。祝你好运!
【讨论】:
@datalearner 这个答案对你有用吗?通过接受或提出问题让社区知道,祝你好运!以上是关于新的滚动平均值列,按一列分组并找到另一列的滚动平均值的主要内容,如果未能解决你的问题,请参考以下文章