首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas插值:在缺失日期范围内转发值

Pandas插值:在缺失日期范围内转发值
EN

Stack Overflow用户
提问于 2021-04-27 20:33:49
回答 1查看 101关注 0票数 1

我有关于设施流量的时间趋势数据(随着时间的推移进入和释放一个设施),有差距。由于这一数据的结构,当出现缺口时,缺口前一天的“释放”是人为的(占在缺口期间释放的所有未见人员的数字),而在差距出现后的第一天的“接纳”(出于同样的原因:在缺口期间被接纳并留在设施内的任何个人在这一天将被视为“接纳”)。

以下是涉及这种数据差距的Pandas系列样本(零表示2020-01-04至2020-01-07之间丢失的数据):

代码语言:javascript
运行
复制
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名。

使用上面的示例系列,重新分配如下所示:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-27 20:46:15

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

代码语言:javascript
运行
复制
# 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')

输出:

代码语言:javascript
运行
复制
            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

更新:保留现有NA值的

代码语言:javascript
运行
复制
# releases
df['releases_i'] = df.groupby(
    df['releases'].ne(0).cumsum()
)['releases'].transform('mean')

# admissions
df['admissions_i'] = df.groupby(
    df['admissions'].ne(0).iloc[::-1].cumsum().iloc[::-1]
)['admissions'].transform('mean')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67290293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档