【发布时间】:2014-08-14 06:49:10
【问题描述】:
我有一个包含两列(X 和 Y 坐标)的数据框。我需要从 df 开始的扩展线性回归。例如,在第 2 点,我需要前 2 点的回归;在第 3 点,前 3 点我需要它,依此类推。根据文档,对于具有一个输入和一个输出的函数 expanding_apply 可以使用,但 linregress 提供 5 个输出。
目前我正在对所有行进行 for 循环,它工作正常,但速度非常慢,几乎无法使用。
我尝试了几件事,但遭到拒绝。尝试将输入作为元组发送:
pd.expanding_apply((df.x, df.y), linregress)
> AttributeError: 'tuple' object has no attribute 'dtype'
尝试将输入作为 df 发送:
pd.expanding_apply(df[['x','y']], linregress)
> IndexError: tuple index out of range
每个回归几乎与之前的回归相同(仅添加了一个数据点),因此大概有很大的加速空间。有什么方法可以在 pandas 或 numpy/scipy 域中更有效地实现这一点?
编辑:linregress 可以选择接受一个二维数组(而不是 2 个单独的一维数组),因此 linregress(df[['x','y']]) 本身可以正常工作。然而expanding_apply 可能期待 arg 的系列,而不是 df。
【问题讨论】: