如何使用多个相邻点在熊猫中插值?

How to interpolate in pandas using multiple neigbouring points?

提问人:Roelant 提问时间:11/8/2023 最后编辑:Roelant 更新时间:11/8/2023 访问量:44

问:

如果我使用它,它会在最后一点和第一点之间画直线。我看到了 或 的选项,但你能让它使用线性回归考虑几个邻居吗?df.interpolatelinearsplinepolynominal

例:

     A    B
0  1.0  0.0
1  2.0  2.0
2  NaN  NaN
3  NaN  NaN
4  5.0  4.0
5  6.0  10.0
6  7.0  12.0
7  8.0  14.0
8  9.0  16.0

现在将导致两列都为 3。这基本上是使用公式,如果我们缺少几行,它也会起作用。但是,我想适合多行/多点。df.interpolate(method='linear')ax+bax+b

我可以用 scipy 做到这一点,但希望 pandas 也能做同样的事情,因为它也提供了更复杂的插值。

from scipy.optimize import curve_fit
import numpy as np 

def lin_reg(x, a, b):
    return a * x + b


(a, b), _ = curve_fit(
    lin_reg, 
    [0, 1, 4, 5, 6, 7, 8], 
    [1, 2, 5, 6, 7, 8, 9], 
    (2, 0)
)

print(lin_reg(np.array([2, 3]), a, b))  # just 3, 4 
      
(a, b), _ = curve_fit(
    lin_reg, 
    [0, 1, 4, 5, 6, 7, 8], 
    [0, 2, 4, 10, 12, 14, 16], 
    (2, 0)
)

print(lin_reg(np.array([2, 3]), a, b))  # 3.3, 5.4
熊猫 插值

评论


答:

0赞 mozway 11/8/2023 #1

用直线,不。只有一种方法可以在两点之间画一条直线。

否则,是的,你可以。问题是你希望它如何?

如果您考虑:

     A    B
0  1.0  0.0
1  2.0  2.0
2  NaN  NaN
3  4.0  4.0
4  5.0  4.5

默认插值给出相同的值:

df.interpolate()

     A    B
0  1.0  0.0
1  2.0  2.0
2  3.0  3.0  # only considering n-1/n+1
3  4.0  4.0
4  5.0  4.5

您可以使用多项式或样条插值:

df.interpolate(method='polynomial', order=2)

     A     B
0  1.0  0.00
1  2.0  2.00
2  3.0  3.25  # considering the neighbors
3  4.0  4.00
4  5.0  4.50

视觉输出:

enter image description here

评论

0赞 Roelant 11/8/2023
谢谢 - 我改变了我的问题,让它更清楚:)
1赞 mozway 11/8/2023
@Roelant目前还不清楚,你能提供一个准确的计算吗?或者至少是逻辑?你会怎么用笔和纸来做?
0赞 Roelant 11/8/2023
添加了我会使用的 scipy 代码。希望现在更清楚:)
0赞 mozway 11/8/2023
那么,如果一列中有多个 NaN,会发生什么?它们都匹配相同的合身度吗?
0赞 Roelant 11/8/2023
它们被线性回归插值?将我的示例扩展到 2 NaN 的差距。