如何有效地应用插值列

时间:2017-09-21 13:51:36

标签: pandas

首先让我先了解一下我最终想要达到的目标。我想有一个类具有pandas核心数据框类型的属性。该数据帧包含我想要插入的(x,y)值对。该类的一个实例将主要用于在新的点x给出一个插值。

让我举个例子

拥有pandas数据框

>>> import numpy as np
>>> import pandas as pd
>>> import scipy
>>> x = np.arange(0,10)
>>> y1 = np.exp(-x/3.0)
>>> y2 = np.sqrt(x)
>>> df = pd.DataFrame(np.concatenate((y1[:,np.newaxis], y2[:,np.newaxis]),axis=1), index=x)

我想实现插值(线性或立方)列,其中索引是两列的x值。优选的是一种解决方案,其结果是每列的函数(插值器)。

这可以通过

实现
>>> f = [scipy.interpolate.interp1d(df.index, df.iloc[:, i], kind='linear') for i in range(2)]

这给了我一个内插器列表。但是,我的最终目标是我有一个班级

class Test:

    def __init__(self, df):
        self.df = df
        self._intep = [scipy.interpolate.interp1d(df.index,df.iloc[:, i], kind='linear') for i in range(len(df.columns))]  

    def __getitem__(self, pos):
        x, y = pos
        col = self.df.columns[y]
        l = [self._intep[i](x) for i in range(len(col))]
        return np.column_stack(l)

使用这个我可以很好地做类似

的事情
t = Test(df)
t[[1, 2, 4], :]

这是我的最终目标。我想像数组一样访问类,并为特定列提供所需的值。它应该非常快速和优化。如果我的专栏有名字怎么办?那么我似乎需要一个字典而不是内插器容器的列表

在python中这是正确的做法吗?我对python很新,对我来说感觉有点难看:)。

0 个答案:

没有答案