使用 pandas 插值法将月值转换为日值

Converting monthly values into daily using pandas interpolation

我有 1000 列的 12 个月平均值,我想使用 pandas 将数据转换为每日数据。我尝试使用 interplolate 来做到这一点,但我得到了从 31/01/1991 到 31/12/1991 的每日值,这不包括全年。一月份的价值没有得到。我使用 date_range 作为数据框的索引。

date=pd.date_range(start="01/01/1991",end="31/12/1991",freq="M")

upsampled=df.resample("D")
interpolated = upsampled.interpolate(method='linear')

如何获取 365 天的插值?

请注意,插值是 个已知点之间。

所以要对全年进行插值,仅仅有 只有 12 个值(每个月)。 您必须有 13 个值(例如每个月初 明年年初)。

因此我创建了源 df 为:

date = pd.date_range(start='01/01/1991', periods=13, freq='MS')
df = pd.DataFrame({'date': date, 'amount': np.random.randint(100, 200, date.size)})

得到例如:

         date  amount
0  1991-01-01     113
1  1991-02-01     164
2  1991-03-01     181
3  1991-04-01     164
4  1991-05-01     155
5  1991-06-01     157
6  1991-07-01     118
7  1991-08-01     133
8  1991-09-01     184
9  1991-10-01     183
10 1991-11-01     159
11 1991-12-01     193
12 1992-01-01     163

然后将其上采样到每日频率并进行插值,我 运行:

df.set_index('date').resample('D').interpolate()

如果您不希望结果包含最后一行(对于 1992-01-01), 只取上面结果的一部分,删除最后一行:

df.set_index('date').resample('D').interpolate()[:-1]