python - 新的滚动平均值列,按一列分组并找到另一列的滚动平均值
问题描述
我有一个数据框 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 |
解决方案
这对我有用:
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
. 祝你好运!
推荐阅读
- c# - 如何使用 MassTransit 从 RabbitMQ 代理接收集成事件?
- node.js - 刷新页面后本地存储数据重置
- sql - 使用中间的连接表查找不与另一个模型关联的对象
- c++ - 具有可变基数的 CRTP 模式
- babeljs - babel-loader 不能处理多行字符串?
- terraform - 如果在 Terraform 中未使用任何变量,则能够确定项目范围
- python - 在 python 中分配和读取大数字会产生不同的结果
- javascript - Bootstrap-Table:展开未隐藏的行
- angular - Angular Ivy Prod - 未加载 Web 组件
- javascript - 如何异步加载指纹识别js并获取访客ID