找到 y 值的线性插值
Linear interpolation to find y values
我有一个数据框:
1 Amazon 1 x 0.0 1.0 2.0 3.0 4.0
2 Amazon 1 y 0.0 0.4 0.8 1.2 1.6
4 Amazon 2 x 0.0 2.0 4.0 6.0 8.0
5 Amazon 2 y 0.0 1.0 2.0 3.0 4.0
df2:
Amazon 1 1
Amazon 2 2.3
Netflix 1 4.1
Netflix 2 5.5
鉴于这两个数据帧,我正在尝试使用线性插值找到 df2 的 'y values',使用 df1 断点
预期输出:
Amazon 1 1 ...
Amazon 2 2.3 ...
线性插值的公式为:y = y1 + ((x – x1) / (x2 – x1)) * (y2 – y1),其中x为已知值,y为未知值,x1和y1是低于已知x值的坐标,x2和y2是高于x值的坐标。
df
的格式看起来很奇怪(数据点在列中,而不是行中)。
下面根本不是最干净的解决方案:
import numpy as np
lookup_df = df1.set_index(["Name", "Segment", "Axis"]).T
def find_interp(row):
try:
res = np.interp([row["x"]], lookup_df[(row["Name"], row["Segment"], "x")], lookup_df[(row["Name"], row["Segment"], "y")])
except:
res = [np.nan]
return res[0]
>>> df2["y"] = df2.apply(find_interp, axis=1)
>>> df2
Name Segment x y
0 Amazon 1 1.0 0.40
1 Amazon 2 2.3 1.15
2 Netflix 1 4.1 NaN
3 Netflix 2 5.5 NaN
我有一个数据框:
1 Amazon 1 x 0.0 1.0 2.0 3.0 4.0
2 Amazon 1 y 0.0 0.4 0.8 1.2 1.6
4 Amazon 2 x 0.0 2.0 4.0 6.0 8.0
5 Amazon 2 y 0.0 1.0 2.0 3.0 4.0
df2:
Amazon 1 1
Amazon 2 2.3
Netflix 1 4.1
Netflix 2 5.5
鉴于这两个数据帧,我正在尝试使用线性插值找到 df2 的 'y values',使用 df1 断点
预期输出:
Amazon 1 1 ...
Amazon 2 2.3 ...
线性插值的公式为:y = y1 + ((x – x1) / (x2 – x1)) * (y2 – y1),其中x为已知值,y为未知值,x1和y1是低于已知x值的坐标,x2和y2是高于x值的坐标。
df
的格式看起来很奇怪(数据点在列中,而不是行中)。
下面根本不是最干净的解决方案:
import numpy as np
lookup_df = df1.set_index(["Name", "Segment", "Axis"]).T
def find_interp(row):
try:
res = np.interp([row["x"]], lookup_df[(row["Name"], row["Segment"], "x")], lookup_df[(row["Name"], row["Segment"], "y")])
except:
res = [np.nan]
return res[0]
>>> df2["y"] = df2.apply(find_interp, axis=1)
>>> df2
Name Segment x y
0 Amazon 1 1.0 0.40
1 Amazon 2 2.3 1.15
2 Netflix 1 4.1 NaN
3 Netflix 2 5.5 NaN