【问题标题】:Python - Pandas: how can I interpolate between values that grow exponentially?Python - Pandas:如何在呈指数增长的值之间进行插值?
【发布时间】:2020-07-05 15:48:36
【问题描述】:

我有一个熊猫系列,其中包含产品的价格演变(我的国家通货膨胀率很高),或者说,某个国家的冠状病毒感染人数。这两个数据集中的值都呈指数增长;这意味着如果您有类似 [3, NaN, 27] 的内容,您需要进行插值,以便在这种情况下用 9 填充缺失值。我检查了 Pandas 文档中的插值方法,但除非我遗漏了什么,否则我没有找到任何关于这种插值类型的信息。

我可以手动做,你只需取几何平均值,或者在更多值的情况下,通过做(最终值/初始值)^(1/它们之间的距离)得到平均增长率,然后相应地相乘.但是我的系列中有很多值要填写,那么我该如何自动完成呢?我想我错过了一些东西,因为这似乎是非常基本的东西。

谢谢。

【问题讨论】:

    标签: python pandas time-series interpolation exponential


    【解决方案1】:

    您可以取序列的对数,进行线性插值,然后将其转换回指数刻度。

    import pandas as pd
    import numpy as np
    
    arr = np.exp(np.arange(1,10))
    arr = pd.Series(arr)
    arr[3] = None
    
    0       2.718282
    1       7.389056
    2      20.085537
    3            NaN
    4     148.413159
    5     403.428793
    6    1096.633158
    7    2980.957987
    8    8103.083928
    dtype: float64
    
    arr = np.log(arr) # Transform according to assumed process.
    arr = arr.interpolate('linear') # Interpolate.
    np.exp(arr) # Invert previous transformation.
    
    0       2.718282
    1       7.389056
    2      20.085537
    3      54.598150
    4     148.413159
    5     403.428793
    6    1096.633158
    7    2980.957987
    8    8103.083928
    dtype: float64
    

    【讨论】:

    • 这非常完美而且非常简单!我真的很沮丧,因为我自己没有考虑过。我仍然想知道是否有 - 或者应该有 - 一步解决方案。谢谢!
    • 指数过程已经足够流行,可以证明默认的一步设置是合理的,我同意!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    相关资源
    最近更新 更多