[英]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.