Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在缺少的日期范围内向前重新分配值_Python_Pandas_Time Series_Interpolation_Series - Fatal编程技术网

Python:在缺少的日期范围内向前重新分配值

Python:在缺少的日期范围内向前重新分配值,python,pandas,time-series,interpolation,series,Python,Pandas,Time Series,Interpolation,Series,我有关于设施流量的时间趋势数据(随着时间的推移,设施的入学人数和毕业人数),有差距。由于该数据的结构,当出现差距时,差距前一天的“释放”人为偏高(占差距期间释放的所有看不见的个人),差距后一天的“入院”人为偏高(出于同样的原因:在间隙期间被接纳并留在设施中的任何个人将在该日期作为“接纳”出现) 以下是涉及此类数据缺口的熊猫系列样本(零表示2020-01-04至2020-01-07的数据缺失): 对此的可视化(忽略缺失总人口的单独线性插值)如下所示: date(index) releases

我有关于设施流量的时间趋势数据(随着时间的推移,设施的入学人数和毕业人数),有差距。由于该数据的结构,当出现差距时,差距前一天的“释放”人为偏高(占差距期间释放的所有看不见的个人),差距后一天的“入院”人为偏高(出于同样的原因:在间隙期间被接纳并留在设施中的任何个人将在该日期作为“接纳”出现)

以下是涉及此类数据缺口的熊猫系列样本(零表示2020-01-04至2020-01-07的数据缺失):

对此的可视化(忽略缺失总人口的单独线性插值)如下所示:

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

很漂亮,谢谢!