用Pandas来插值一条直线

2024-06-16 12:50:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有ResidMat和Price的数据帧,我使用scipy找到插值线。我使用CubicSpline和apply查找数据集中的所有数据。但速度不是很快,因为在这种情况下,我们没有更多的数据。我将有100多个数据,速度非常慢。你有没有办法做到这一点,但也许有一个矩阵

谢谢,

    def add_interpolated_price(row, generic_residmat):
        from scipy.interpolate import CubicSpline
        residmats = row[['ResidMat']].values
        prices = row[['Price']].values
        cs = CubicSpline(residmats, prices)
        return float(cs(generic_residmat))

    df = pd.DataFrame([[1,18,38,58,83,103,128,148,32.4,32.5,33.8,33.5,32.8,32.4,32.7],[2,17,37,57,82,102,127,147,31.2,31.5,32.7,33.2,32.5,32.9,33.3]],columns = ['index','ResidMat','ResidMat','ResidMat','ResidMat','ResidMat','ResidMat','ResidMat','Price','Price','Price','Price','Price','Price','Price'],index=['2010-06-25','2010-06-28'])
    my_resimmat = 30
    df['Generic_Value'] =  df.apply(lambda row: add_interpolated_price(row, generic_residmat=my_resimmat), axis=1)

Tags: 数据adddfscipyprice速度genericrow
1条回答
网友
1楼 · 发布于 2024-06-16 12:50:17

在查看了这段代码的概要之后,大部分时间都花在了插值上,所以我建议最好的方法是泛并行Make Pandas DataFrame apply() use all cores?有详细信息。我最喜欢的是这种方法。。。(大纲代码如下)

from pandarallel import pandarallel
from math import sin

pandarallel.initialize()

def func(x):
    return sin(x**2)

df.parallel_apply(func, axis=1)

但这只适用于Linux和Macos,在Windows上,Pandarallel仅在Python会话从Windows Linux子系统(WSL)执行时才起作用

相关问题 更多 >