提问人:Roelant 提问时间:11/8/2023 最后编辑:Roelant 更新时间:11/8/2023 访问量:44
如何使用多个相邻点在熊猫中插值?
How to interpolate in pandas using multiple neigbouring points?
问:
如果我使用它,它会在最后一点和第一点之间画直线。我看到了 或 的选项,但你能让它使用线性回归考虑几个邻居吗?df.interpolate
linear
spline
polynominal
例:
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+b
ax+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
视觉输出:
评论
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 的差距。
评论