Python:在缺少的日期范围内向前重新分配值
我有关于设施流量的时间趋势数据(随着时间的推移,设施的入学人数和毕业人数),有差距。由于该数据的结构,当出现差距时,差距前一天的“释放”人为偏高(占差距期间释放的所有看不见的个人),差距后一天的“入院”人为偏高(出于同样的原因:在间隙期间被接纳并留在设施中的任何个人将在该日期作为“接纳”出现) 以下是涉及此类数据缺口的熊猫系列样本(零表示2020-01-04至2020-01-07的数据缺失): 对此的可视化(忽略缺失总人口的单独线性插值)如下所示:Python:在缺少的日期范围内向前重新分配值,python,pandas,time-series,interpolation,series,Python,Pandas,Time Series,Interpolation,Series,我有关于设施流量的时间趋势数据(随着时间的推移,设施的入学人数和毕业人数),有差距。由于该数据的结构,当出现差距时,差距前一天的“释放”人为偏高(占差距期间释放的所有看不见的个人),差距后一天的“入院”人为偏高(出于同样的原因:在间隙期间被接纳并留在设施中的任何个人将在该日期作为“接纳”出现) 以下是涉及此类数据缺口的熊猫系列样本(零表示2020-01-04至2020-01-07的数据缺失): 对此的可视化(忽略缺失总人口的单独线性插值)如下所示: date(index) releases
date(index) releases admissions
2020-01-01 15 23
2020-01-02 8 20
2020-01-03 10 14
2020-01-04 10 20
2020-01-05 10 20
2020-01-06 10 20
2020-01-07 10 20
2020-01-08 8 20
2020-01-09 11 19
2020-01-10 9 17
我想平滑这些数据,但我不确定使用什么插值方法。我想完成的是在日期间隔(0)-1时向前重新分配“发布”数据,在日期间隔(n)+1时向后重新分配“入学”数据。例如,如果间隔为4天且在日期间隔(n)时+1有100个招生,我想重新分配,在每一天的差距,有20个招生,当天差距(n)+1招生修改显示20
使用上述示例系列,重新分发将如下所示:
date(index) releases admissions
2020-01-01 15 23
2020-01-02 8 20
2020-01-03 10 14
2020-01-04 10 20
2020-01-05 10 20
2020-01-06 10 20
2020-01-07 10 20
2020-01-08 8 20
2020-01-09 11 19
2020-01-10 9 17
您可以为
发布
创建前一个连续零+一个值,为录取
创建后一个值的组,然后使用转换(“平均值”)
计算每个组的平均值:
# releases
df['releases'] = df.groupby(
df['releases'].replace(0, np.nan).notna().cumsum()
)['releases'].transform('mean')
# admissions
df['admissions'] = df.groupby(
df['admissions'].replace(0, np.nan).notna().iloc[::-1].cumsum().iloc[::-1]
)['admissions'].transform('mean')
输出:
releases admissions
date
2020-01-01 15 23
2020-01-02 8 20
2020-01-03 10 14
2020-01-04 10 20
2020-01-05 10 20
2020-01-06 10 20
2020-01-07 10 20
2020-01-08 8 20
2020-01-09 11 19
2020-01-10 9 17
很漂亮,谢谢!