使用 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]
我有 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]