【问题标题】: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]
    

    【讨论】:

      猜你喜欢
      • 2022-06-30
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 2015-03-23
      相关资源
      最近更新 更多