python - 如何仅在特定窗口上进行插值?
问题描述
我有一个遵循每周索引的数据集,以及我需要获取插值数据的日期列表。例如,我有以下 df 每周聚合:
data value
1/01/2021 10
7/01/2021 10
14/01/2021 10
28/01/2021 10
以及与 df 索引日期不一致的日期列表,例如:
list_dates = [12/01/2021, 13/01/2021 ...]
我需要获取list_dates
给定窗口内每个日期的插值(例如:仅使用 df 中的 4 个值来计算插值,在之前和之后之间分割 --> 所以之前的 2 个第一个日期列表日期和列表日期之后的 2 个第一个日期)。
要在列表中获取列表日期 12/01/2021 的插值,我需要使用:
1/1/2021
7/1/2021
14/1/2021
28/1/2021
输出将是:
data value
1/01/2021 10
7/01/2021 10
12/01/2021 10
13/01/2021 10
14/01/2021 10
28/01/2021 10
我已经成功编写了一个示例,但是当连续有多个 NaN 时它会失败(例如:12/01 和 13/01)。在运行列表中的下一个之前,我也无法连接插值,因为那将使用插值日期来计算新的插值日期(例如:使用 12/01 计算 13/01)。
关于如何做到这一点的任何建议?
解决方案
用于interpolate
获得预期结果,但在您必须准备如下数据框之前。
我稍微修改了您的输入数据,以显示您使用 datetimeindex ( method='time'
) 进行插值:
# Input data
df = pd.DataFrame({'data': ['1/01/2021', '7/01/2021', '14/01/2021', '28/01/2021'],
'value': [10, 10, 17, 10]})
list_dates = ['12/01/2021', '13/01/2021']
# Conversion of dates
df['data'] = pd.to_datetime(df['data'], format='%d/%m/%Y')
new_dates = pd.to_datetime(list_dates, format='%d/%m/%Y')
# Set datetime column as index and append new dates
df = df.set_index('data')
df = df.reindex(df.index.append(new_dates)).sort_index()
# Interpolate with method='time'
df['value'] = df['value'].interpolate(method='time')
输出:
>>> df
value
2021-01-01 10.0
2021-01-07 10.0
2021-01-12 15.0 # <- time interpolation
2021-01-13 16.0 # <- time interpolation
2021-01-14 17.0 # <- changed from 10 to 17
2021-01-28 10.0
推荐阅读
- python - AWS 上的 jupyter 笔记本
- docker - 通过 docker 运行 Hashicorp vault ui 时无法访问
- r - R:如果记录在特定列上匹配,但在另一列中不同,则删除不同值为 NA 的行
- r - 如何在 R 中添加基于用户 ID 和会话 ID 的平均列?
- r - 对 data.table 使用 i 中变量的字符串表示
- python - 通过 uwsgi 启动 Flask 时没有加载应用程序
- java - Spring Data JPA删除多对多关系问题
- python - 如何使用 Python 将 msdata xml 转换为 ms excel 电子表格
- javascript - 如何在 JavaScript 中获取页面语言(hreflang)并将其作为参数添加到链接
- python - 如何获得世界坐标?