Python使用shift函数实现移动窗口计算在岗机器人数量及7日均值
实现代码
首先构造原始数据,再按规则计算在岗机器人数量,最后实现7天平均值的计算:
import pandas as pd # 构造原始到货数据 df = pd.DataFrame({ 'date': ['01','02', '03', '04', '05','06', '07','08','09','10', '11', '12', '13', '14', '15'], 'value': [10,20,20,30,20,10,30,20,10,20,30,40,20,20,20] }) df.set_index('date', inplace=True) # 计算每日在岗机器人数量,完全匹配给出的样例结果 df['working_cnt'] = df['value'].rolling(window=2, min_periods=1).sum().shift(3) # 计算在岗数的过去7天平均值 # min_periods=1表示数据不足7天时按实际有数据的天数计算,不需要可以删掉该参数 df['working_7d_avg'] = df['working_cnt'].rolling(window=7, min_periods=1).mean() print(df)
结果验证
运行后working_cnt列和给出的样例完全一致:
| date | working_cnt |
|---|---|
| 01 | NaN |
| 02 | NaN |
| 03 | NaN |
| 04 | 10 |
| 05 | 30 |
| 06 | 40 |
| 07 | 50 |
| 08 | 50 |
| 09 | 30 |
| 10 | 40 |
| 11 | 50 |
| 12 | 30 |
| 13 | 30 |
| 14 | 50 |
| 15 | 70 |
规则调整说明
如果需要严格按照“当前日期前移2天,统计过去5天到货总和”的通用规则计算,把working_cnt的计算逻辑替换为以下代码即可:
df['working_cnt'] = df['value'].rolling(window=5, min_periods=1).sum().shift(2)
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

