两组点之间的插值

2024-04-24 19:23:46 发布

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

我有一个数据集,格式如下:

     A    B     C     D     E
0  0.5  0.2  0.25  0.75  1.25
1  0.5  0.3  0.12  0.41  1.40
2  0.5  0.4  0.85  0.15  1.55
3  1.0  0.2  0.11  0.15  1.25
4  1.0  0.3  0.10  0.11  1.40
5  1.0  0.4  0.87  0.14  1.25
6  2.0  0.2  0.23  0.45  1.55
7  2.0  0.3  0.74  0.85  1.25
8  2.0  0.4  0.55  0.55  1.40

下面是用pandas生成此数据帧的代码:

import pandas as pd

data = [[0.5, 0.2, 0.25, 0.75, 1.25],
        [0.5, 0.3, 0.12, 0.41, 1.40],
        [0.5, 0.4, 0.85, 0.15, 1.55],
        [1.0, 0.2, 0.11, 0.15, 1.25],
        [1.0, 0.3, 0.10, 0.11, 1.40],
        [1.0, 0.4, 0.87, 0.14, 1.25],
        [2.0, 0.2, 0.23, 0.45, 1.55],
        [2.0, 0.3, 0.74, 0.85, 1.25],
        [2.0, 0.4, 0.55, 0.55, 1.40]]

df = pd.DataFrame(data,columns=['A','B','C','D','E'])

这些数据代表了一个实验的结果,其中每个A B和E都有一个唯一的值C

我想要的是执行一个线性插值,这样我就可以得到a=0.7的相似数据,例如基于a=0.5和a=1的值。 预期输出应类似于:

     A    B     C     D     E
0  0.5  0.2  0.25  0.75  1.25
1  0.5  0.3  0.12  0.41  1.40
2  0.5  0.4  0.85  0.15  1.55
3  0.7  0.2  xxx   xxx   1.25
4  0.7  0.3  xxx   xxx   1.40
5  0.7  0.4  xxx   xxx   1.55
6  1.0  0.2  0.11  0.15  1.25
7  1.0  0.3  0.10  0.11  1.40
8  1.0  0.4  0.87  0.14  1.25
9  2.0  0.2  0.23  0.45  1.55
10  2.0  0.3  0.74  0.85  1.25
11  2.0  0.4  0.55  0.55  1.40

在Python中有没有一种简单的方法可以做到这一点?我试着使用the panda interpolate,但得到的值没有意义。你知道吗

有什么建议吗?你知道吗


Tags: columnsthe数据方法代码importdataframepandas
1条回答
网友
1楼 · 发布于 2024-04-24 19:23:46

下面是一个如何创建插值函数的示例,该函数将A列中的值映射到C列中的值(对于A的值,任意选取0.5到2.0):

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

# Set up the dataframe
data = [[0.5, 0.2, 0.25, 0.75, 1.25],
        [0.5, 0.3, 0.12, 0.41, 1.40],
        [0.5, 0.4, 0.85, 0.15, 1.55],
        [1.0, 0.2, 0.11, 0.15, 1.25],
        [1.0, 0.3, 0.10, 0.11, 1.40],
        [1.0, 0.4, 0.87, 0.14, 1.25],
        [2.0, 0.2, 0.23, 0.45, 1.55],
        [2.0, 0.3, 0.74, 0.85, 1.25],
        [2.0, 0.4, 0.55, 0.55, 1.40]]
df = pd.DataFrame(data,columns=['A','B','C','D','E'])

# Create the interpolation function
f = interpolate.interp1d(df['A'], df['C'])

# Evaluate new A (x) values to get new C (y) values via interpolation
xnew = np.linspace(0.5, 2.0, 10)
ynew = f(xnew)
print("%-7s %-7s"%("A","C"))
print("-"*16)
for x, y in zip(xnew, ynew):
    print("%0.4f\t%0.4f"%(x,y))

结果是:

A       C
        
0.5000  0.8500
0.6667  0.6033
0.8333  0.3567
1.0000  0.8700
1.1667  0.7633
1.3333  0.6567
1.5000  0.5500
1.6667  0.4433
1.8333  0.3367
2.0000  0.5500

相关问题 更多 >