首页 > 解决方案 > 使用 pandas 将数据从给定日期列重新采样和插值到不同的日期列

问题描述

我主要可以使用熊猫找到从例如每日日期范围到每月日期范围或从每月/每年日期范围到每日日期范围的转换和向下/上采样。

有没有一种方法可以使用插值/外推法将任意日期的给定数据映射到不同的日期?

标签: pandasdateresampling

解决方案


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

推荐阅读