首页 > 解决方案 > 处理来自多个熊猫数据帧的数据时的插值方法?

问题描述

我有一个包含许多列的 DataFrame,我想使用 x、y 点和我已知的 x 值进行插值以获取 y 值。我知道如何通过选择 x、y 点和 x 值的一列(每个 DataFrame 的)来执行插值。我的目标是拥有一个包含所有插值 y 值的 DataFrame。通常,我可以通过以下两种方式之一获得 y 值(据我所知):

以下是我的 DataFrame 的格式示例:

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) 我可以使用 scipy 为每个 DataFrame 中的每一列计算:

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)

什么是在所有 DataFrame 中完成此操作的明智方法,以便我返回一个看起来像 df_x_vals 的单个 DataFrame,除了一个包含所有插值 y 值的 DataFrame?任何帮助是极大的赞赏!

标签: pythonpython-3.xpandasnumpyinterpolation

解决方案


聚会有点晚了,没有足够的代表发表评论,所以我把这个作为答案:

你如何使用它在列之间插入值,而不是向下插入行?

检查 的axis论点DataFrame.Interpolate,我相信这就是你想要的。

基本上...interpolate(..., axis=1)


推荐阅读