【问题标题】:python - interpolation on dataframe valuespython - 数据帧值的插值
【发布时间】:2021-11-30 01:39:04
【问题描述】:

我的代码:

import pandas as pd
import numpy as np
from scipy.interpolate import interp1d

def interpolate_iv_my(x,y,newX_Value):
    y_interp =  interp1d(x,y)
    iv = y_interp(newX_Value)
    return iv

import pandas as pd
df = pd.DataFrame({'30': [-23, 12, -12, 10, -23, 12, -32, 15, -20, 10],
                   '40': [-30, 20, -21, 15, -33, 22, -40, 25, -22, 12],
                   '50': [-40, 25, -26, 19, -39, 32, -45, 35, -32, 18],
                   '60': [-45, 34, -29, 25, -53, 67, -55, 45, -42, 19],
})

x = [30,40,50,60]
df['x_'] = np.random.choice([35,33,42,52],10).tolist()

数据框的图片:

  • 我正在尝试获取具有对应插值的新列 到“x_”列中的值。例如对于第一行 x 值 52

插值将是

y = [-23,-30,-40,-45]

interpolate_iv_my(x,y,52)

which gives me -41.0

对所有行执行此操作的最佳方法是什么(我的数据框有超过 50k 行)?

已编辑

好的想出了这个不知道这是否是最好的解决方案

iter_list = []
for l,r in df.iterrows():
    y = []
    y.append(r['30'])
    y.append(r['40'])
    y.append(r['50'])
    y.append(r['60'])
    iter_list.append(interpolate_iv_my(x,y,r['x_']).tolist())

df ['interpolated'] = iter_list

【问题讨论】:

标签: python dataframe interpolation


【解决方案1】:

我认为您的 interpolate_iv_my 功能无法正常工作。

但是将函数应用于数据框中的所有行并根据这些结果创建新列的正确代码是这样的:

df['interpolate'] = df.apply(lambda row: interpolate_iv_my(row, x, 52), axis=1)

【讨论】:

  • 不,我认为函数看起来不错,我只是在 Excel 上手动运行前三行的插值并匹配 python 值
  • 回到你提出的解决方案我如何在我的代码中传递我正在苦苦挣扎的行,我认为在你的代码中它应该是 (x, row, 52) 而不是 (row, x, 52)
  • 你换的时候有用吗?
  • 您的代码没有告诉我如何将行传递给应用函数。
  • 我很抱歉,但确实如此 - 它使用了 lambda 函数,并将 row 参数传递给该函数。类似的答案在这里:stackoverflow.com/a/33518725/11101156
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 2017-12-19
  • 2019-10-27
  • 1970-01-01
  • 2023-02-10
  • 2015-09-08
  • 1970-01-01
相关资源
最近更新 更多