【问题标题】:Python pandas dataframe: interpolation using dataframe data without updating it. Just get the interpolated value.Python pandas 数据帧:使用数据帧数据进行插值而不更新它。只需获取插值。
【发布时间】:2016-04-23 16:00:39
【问题描述】:

我对 Python pandas 库还很陌生,在其他帖子中找不到我的问题的答案。我有一个看起来像这样的数据框。日期是索引名称,系列是列名称。

>>> MyDataframe
             Serie1  Serie2  Serie3  Serie4  Serie5 
2011-04-30      92      96     NaN     NaN     NaN  
2011-05-31     164     168      12     16      NaN
2011-06-30     238     242      90     20      88
2011-07-31     322     326     169     120     167

我想在这个数据帧中执行一维线性插值,但不修改数据帧,我只想得到结果。例如,我想确定 Serie2 在 2011-06-10 日期的值是多少。函数DataFrame.interpolate()Series.interpolate() 似乎仅用于用插值数据替换NaN

是否有可以执行以下操作的功能:

Result = MyDataFrame['Serie2'].interpolate('2011-06-10')

它只会返回 168 到 242 之间的线性插值。

提前感谢您的支持!

【问题讨论】:

    标签: python pandas interpolation


    【解决方案1】:

    interpolate 使用现有索引进行插值,因此您必须 reindex df 然后调用 interpolate

    In [48]:
    df.reindex(pd.date_range(df.index[0], df.index[-1])).interpolate().loc['2011-06-10']
    
    Out[48]:
    Serie1    188.666667
    Serie2    192.666667
    Serie3     38.000000
    Serie4     17.333333
    Serie5           NaN
    Name: 2011-06-10 00:00:00, dtype: float64
    

    完成后,您可以选择特定的日期和列:

    In [49]:
    df.reindex(pd.date_range(df.index[0], df.index[-1])).interpolate().loc['2011-06-10']['Serie2']
    
    Out[49]:
    192.66666666666666
    

    在这里,我使用date_range 使用索引中的第一个和最后一个值生成一个新的datetimeindex

    在您范围内的现有索引值之间进行插值会更有效。

    我们可以使用get_slice_bound找到索引值的下限:

    In [70]:
    start = df.index.get_slice_bound('2011-06-10', side='right', kind=None)
    
    df.reindex(pd.date_range(df.index[start-1], df.index[start])).interpolate().loc['2011-06-10']['Serie2']
    Out[70]:
    192.66666666666666
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2018-05-15
      • 2017-04-25
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-20
      相关资源
      最近更新 更多