У меня есть DataFrame, который имеет много столбцов, и я хочу интерполировать, чтобы получить значения y, используя точки x, y и мои известные значения x. Я знаю, как выполнить интерполяцию, выбрав один столбец (каждого фрейма данных) из x, y точек и значений x. Моя цель - иметь DataFrame, содержащий все интерполированные значения y. Как правило, я могу получить значения y одним из двух способов (которые мне известны):
Вот пример того, как мои DataFrames устанавливаются изначально отформатированными:
random.seed( 30 )
df_x_pts = pd.DataFrame({
"x_pts_1": np.random.uniform(low=1, high=200, size=(10,)),
"x_pts_2": np.random.uniform(low=1, high=500, size=(10,)),
"x_pts_3": np.random.uniform(low=1, high=750, size=(10,)),})
df_y_pts = pd.DataFrame({
"y_pts_1": np.random.uniform(low=1, high=200, size=(10,)),
"y_pts_2": np.random.uniform(low=1, high=500, size=(10,)),
"y_pts_3": np.random.uniform(low=1, high=750, size=(10,)),})
df_x_vals = pd.DataFrame({
"x_vals_1": np.random.uniform(low=1, high=200, size=(50,)),
"x_vals_2": np.random.uniform(low=1, high=500, size=(50,)),
"x_vals_3": np.random.uniform(low=1, high=750, size=(50,)),})
1) Я могу рассчитать это для каждого столбца в каждом DataFrame, используя scipy:
import pandas as pd
import numpy as np
from scipy.interpolate import interp1d
y = df_y_pts["y_pts_1"]
x = df_x_pts["x_pts_1"]
# Fit the interpolation on the original index and values
f = interp1d(x, y, kind='linear')
# Perform interpolation for values across the full desired index
f(x_val)
2) Или используя numpy:
x_pts = df_x_pts["x_pts_1"]
y_pts = df_y_pts["y_pts_1"]
x_vals = df_x_vals["x_vals_1"]
y_vals = np.interp(x_vals, x_pts, y_pts)
print(y_vals)
Каков разумный метод для выполнения sh этого во всех DataFrames, чтобы я получил один DataFrame, который выглядел бы как df_x_vals, за исключением того, что DataFrame состоит из всех интерполированных значений y?