python - Pandas 根据不同的列对 NaN 进行插值

标签 python pandas interpolation

我有以下数据帧(摘录)

data = pd.DataFrame([[0., -10.88948939, 74.22099994, 1.5, "NW", 0], [0.819377018, -10.88948939, 74.22099994, 1.5, "NW", 1], [8.47965933, -10.88948939, 74.22099994, 1.5, "NW", 10], [15.38036833, -10.88948939, 74.22099994, 1.5, "NW", 20]], columns=["Velocity", "X", "Y", "Z", "wind_direction", "wind_speed"])

Velocity  X      Y     Z  wind_direction wind_speed
0        -10.88 74.22 1.5 NW             0
0.82     -10.89 74.22 1.5 NW             1
8.48     -10.89 74.22 1.5 NW             10
15.38    -10.89 74.22 1.5 NW             20

它表示特定坐标(X、Y、Z)和两个边界条件(wind_direction 和wind_speed)的CFD 模拟结果。

我想估计相同点(X,Y,Z)的速度,相同的wind_direction,但中间wind_speed,比如4.6。我的数据框中有这个额外的行
NaN -10.89 74.22 1.5 NW 4.6

现在我想根据wind_speed进行插值以填充NaN。对于上面的例子,我希望得到 6.643773541

数字来自线性插值:

0.82 + (4.6 - 1)/(10 - 1) * (8.48 - 0.82)

任何的想法?谢谢

更新

我已经找到了解决上述问题的方法。诀窍是使用 groupby 并定义一个函数,该函数对由 groupby 创建并传递给 apply() 的数据帧进行插值。就我而言,这是功能
def interp(x, wind_speed):
    g = interpolate.interp1d(np.array(x["wind_speed"]), np.array(x["Velocity"]))
    return g(wind_speed)

这是我的 groupby
group = df.groupby("point").apply(interp, wind_speed)

必须使用表示执行插值的点的参数调用函数 interp。

我想知道是否有更好的方法来做到这一点。

最佳答案

我的解决方案是通过以下方式索引“wind_speed”:

df.set_index('wind_speed', inplace=True)

然后我通过索引列进行插值
df.interpolate(method='index', inplace=True)

现在我可以返回之前的状态
df.reset_index(inplace=True)

如果进展顺利,请告诉我...

关于python - Pandas 根据不同的列对 NaN 进行插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27235112/

相关文章:

python - python中的类类型

python - 如何可视化 Pandas Dataframe 中的时间数据?

python - 如何将 axhline 发送到 Matplotlib 条形图的后面

python - 当我更改 DataFrame 的索引时,使用 pandas 进行绘图似乎效果不佳

arrays - 何时使用转置在 Julia 中绘制轮廓

regex - 如何在没有插值的情况下在正则表达式中多次匹配行尾?

php - mysql 插入数据

python - write() 写入的文件无法在 Windows 中打开

python - 当默认提供的不是元组时,为什么 python 中的链式字典 .get() 返回元组?

python - Pytest 找不到 Lambda 层中定义的函数