lsr*_*729 4 python interpolation pandas
我有 1000 列的 12 个平均每月值,我想使用 pandas 将数据转换为每日数据。我尝试使用插值来完成此操作,但我得到了从 1991 年 1 月 31 日到 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')
Run Code Online (Sandbox Code Playgroud)
如何获得 365 天的插值?
请注意,插值介于在已知点
\n\n因此,要在全年中进行插值,仅拥有\n12个值(每个月)是不够的。\n您必须拥有13 个值(例如,每个月的开始和\n下一年的开始)。
\n\n因此我创建了源df创建为:
\n\ndate = pd.date_range(start='01/01/1991', periods=13, freq='MS')\ndf = pd.DataFrame({'date': date, 'amount': np.random.randint(100, 200, date.size)})\nRun Code Online (Sandbox Code Playgroud)\n\n得到例如:
\n\n date amount\n0 1991-01-01 113\n1 1991-02-01 164\n2 1991-03-01 181\n3 1991-04-01 164\n4 1991-05-01 155\n5 1991-06-01 157\n6 1991-07-01 118\n7 1991-08-01 133\n8 1991-09-01 184\n9 1991-10-01 183\n10 1991-11-01 159\n11 1991-12-01 193\n12 1992-01-01 163\nRun Code Online (Sandbox Code Playgroud)\n\n\xe2\x80\x8b然后将其上采样到每日频率并进行插值,我运行:
\n\ndf.set_index('date').resample('D').interpolate()\nRun Code Online (Sandbox Code Playgroud)\n\n如果您不希望结果包含最后一行(对于1992-01-01),\n仅取上述结果的一部分,删除最后一行:
\n\ndf.set_index('date').resample('D').interpolate()[:-1]\nRun Code Online (Sandbox Code Playgroud)\n