pandas - 使用 pandas 将数据从给定日期列重新采样和插值到不同的日期列
问题描述
我主要可以使用熊猫找到从例如每日日期范围到每月日期范围或从每月/每年日期范围到每日日期范围的转换和向下/上采样。
有没有一种方法可以使用插值/外推法将任意日期的给定数据映射到不同的日期?
解决方案
Index.union
, reindex
, 和interpolate
MCVE
创建玩具数据。每隔一天排三排。
tidx = pd.date_range('2018-01-01', periods=3, freq='2D')
df = pd.DataFrame(dict(A=[1, 3, 5]), tidx)
df
A
2018-01-01 1
2018-01-03 3
2018-01-05 5
介于两者之间的那些日子的新指数
other_tidx = pd.date_range(tidx.min(), tidx.max()).difference(tidx)
解决方案
创建一个新索引,它是旧索引和新索引的并集
union_idx = other_tidx.union(df.index)
当我们reindex
有了这个我们得到
df.reindex(union_idx)
A
2018-01-01 1.0
2018-01-02 NaN
2018-01-03 3.0
2018-01-04 NaN
2018-01-05 5.0
我们看到了我们预期的差距。现在我们可以使用interpolate
. 但是我们需要使用参数method='index'
来确保我们相对于索引中间隙的大小进行插值。
df.reindex(union_idx).interpolate('index')
A
2018-01-01 1.0
2018-01-02 2.0
2018-01-03 3.0
2018-01-04 4.0
2018-01-05 5.0
而现在这些空白被填补了。
我们可以再次重新索引以减少到其他索引值
df.reindex(union_idx).interpolate('index').reindex(other_tidx)
A
2018-01-02 2.0
2018-01-04 4.0
推荐阅读
- android - 在不影响用户界面的情况下模拟android上的触摸事件而不影响用户界面(使用root)
- python - 如何使用值列表中的列创建一个新的数据框(下面有更好的描述)?
- amazon-web-services - 在没有 microsoft grap API 的情况下将 OneDrive 文件迁移到 s3?
- sql - 如何使用额外的列执行“插入到 select *”查询?
- java - jdbcItemReader 支持分区吗?
- git - Git 提交哈希影响新格式 csproj 的 Visual Studio dll/exe 二进制文件
- vscode-extensions - CI发布操作时如何查询vs代码扩展版本?
- python - DeepAR 预测中的 Sagemaker 端点 BrokenPipeError
- api - 内部开发期间的版本控制 API
- python - 检查 SQS 和 Lambda 是否使用 boto3 加密