数据帧列上的插值

2024-04-20 00:04:18 发布

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

我需要在pandas.DataFrame的两列之间进行插值,以填充它们之间的列。 下面是我的data frame的几行,要填充的列是col2

col1  col2  col3
2.35    1   2.37
2.47    1   2.49
2.51    1   2.53
2.57    1   2.58
2.54    1   2.57

所以对于插值,我想使用numpy.interp(x,xp,fp),但我不知道如何组织数据以便能够使用它。这是因为每行的插值应该在col1col3之间。 例如,对于第一行,我需要它如下所示:

xp=[1,3]
fp=[2.47,2.49]
x=2
y=numpy.interp(x,xp,fp)

然后用y填充col2的第一行。我需要一次又一次地为每一行这样做。 怎么做


Tags: 数据numpydataframepandasdataframexpcol2
2条回答

如前所述,x值是静态的(除非我误解了您的问题),值为1和3。您需要在这些值和两个改变的y值之间进行线性插值。您只需平均y值,这就是线性插值。不要忽视一些花哨的简单/明显的解决方案(我总是努力记住的建议)

df.col2 = df[["col1", "col3"]].mean(axis=1)

开始编辑

Andre的解决方案应该有效(我自己没有测试过,但应该有效)。然而,这需要迭代每一行,这可能会很慢。此外,还有一个简单的数学解决方案,允许您对阵列进行操作,这应该会更快

线性插值遵循以下一般形式:

y = y0 + (x - x0) * (y1 - y0) / (x1 - x0)

将其放在数据帧/代码方面:

df.col2 = df.col1 + (x - xp[0]) * (df.col2 - df.col1) / (xp[1] - xp[0])

我认为这是正确的,但上面的公式成立。只需在代码中实现它或循环每一行并调用numpy.interp函数。不管怎样,你都应该没事

这将使您迭代每一行,替换两个单元格之间的值。但插值似乎不起作用。我没有太多的经验,所以我无法在网上找到一个简单的解决方法。这是唯一一条不改变值的线。(我不知道xp或x做什么,所以我保留了它们)

xp=[1,3]
x = 2
for rowNr in range(len(df.index)):
    fp=[df.iat[rowNr, 0], df.iat[rowNr, 2]]
    df.iat[rowNr, 1] = numpy.interp(x, xp, fp)

相关问题 更多 >