【问题标题】:Converting monthly values into daily using pandas interpolation使用熊猫插值将每月值转换为每日值
【发布时间】:2020-04-08 18:28:04
【问题描述】:
我有 1000 列的 12 个平均每月值,我想使用 pandas 将数据转换为每日数据。我曾尝试使用 interplolate 进行此操作,但我得到了从 1991 年 1 月 1 日到 1991 年 12 月 31 日的每日值,这并不涵盖全年。一月份的值没有得到。我使用 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 天的插值?
【问题讨论】:
标签:
python
pandas
interpolation
【解决方案1】:
请注意,插值是在已知点之间。
所以要对全年进行插值,仅仅有
只有 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]