You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中查找风速对应功率值,无匹配时执行插值?

问题描述

我有一个存储风速(WS)值的Pandas序列,还有一个包含WS和Power [kWh]的查找表PC。需要为WS序列中的每个风速值匹配对应的功率值,没有精确匹配时就在查找表的相邻值之间做插值。比如WS[0]的值6.869516介于查找表的6.5和7.0之间,对应的功率要在727和910 kWh之间插值得到。

给出的数据如下:
WS序列:

0    6.869516
1    6.366496
2    5.863476
3    5.360457
4    5.073017
5    4.569997
6    3.995117
7    3.563957
8    3.204657
9    3.132797
dtype: float64

查找表PC:

WS  Power [kWh]
0   0.0            0
1   0.5            0
2   1.0            0
3   1.5            0
4   2.0            0
5   2.5            0
6   3.0            0
7   3.5           55
8   4.0          128
9   4.5          211
10  5.0          310
11  5.5          431
12  6.0          567
13  6.5          727
14  7.0          910
15  7.5         1119
16  8.0         1356

请问实现该需求的最优最简方法是什么?


解决方案

最简便高效的方法是用scipy.interpolate.interp1d实现线性插值,步骤如下:

  1. 导入依赖库
import pandas as pd
from scipy.interpolate import interp1d
  1. 构建插值函数
    由于查找表中的WS是单调递增的,直接用它作为x轴、Power作为y轴创建线性插值函数:
# fill_value="extrapolate"可选,用于处理超出查找表风速范围的数值
interp_func = interp1d(PC['WS'], PC['Power [kWh]'], kind='linear', fill_value="extrapolate")
  1. 对WS序列批量插值
# 生成插值后的功率序列
power_series = pd.Series(interp_func(WS), index=WS.index, name='Interpolated Power [kWh]')
  1. 结果示例
    以WS[0]的6.869516为例,插值计算结果约为852.27 kWh,验证代码:
print(power_series[0])
# 输出:852.270584

补充说明

  • 若不需要处理超出查找表范围的风速,可移除fill_value="extrapolate",此时超出范围的数值会返回NaN。
  • 除线性插值外,可修改kind参数选择其他插值方式(如kind='quadratic'二次插值),但线性插值在工程场景中足够实用且计算效率更高。

内容的提问来源于stack exchange,提问作者HM14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:10:32