python:在丢失的日期范围内向前重新分配值

bfrts1fy  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(345)

我有设施流量的时间趋势数据(随着时间的推移,设施的入学和毕业),有差距。由于该数据的结构,当出现差距时,差距前一天的“释放”人为偏高(占差距期间释放的所有看不见的个体),而缺口后一天的“入院率”被人为抬高(原因相同:任何在缺口期间入院并留在设施内的个人将在这一天以“入院率”出现)。
以下是一个涉及此类数据差距的Pandas系列样本(0表示2020-01-04至2020-01-07的数据缺失):

date(index)    releases    admissions
2020-01-01     15          23
2020-01-02     8           20
2020-01-03     50          14
2020-01-04     0           0
2020-01-05     0           0
2020-01-06     0           0
2020-01-07     0           0
2020-01-08     8           100
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
gpnt7bae

gpnt7bae1#

您可以在为之前创建具有连续零+一个值的组 releases 和后面的一个值 admissions ,然后使用 transform('mean') 要计算每组的平均值:


# 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

相关问题