繁体   English   中英

Python pandas dataframe:使用数据帧数据进行插值而不更新它。 只需获取插值即可。

[英]Python pandas dataframe: interpolation using dataframe data without updating it. Just get the interpolated value.

我是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

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

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

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

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

在此先感谢您的支持!

使用现有索引进行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找到索引值的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM