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

如何将RPM曲线按固定间隔重采样并获取对应效率值?

生成固定间隔RPM序列并匹配效率值的解决方案

你的需求是将不规则分布的RPM值转换为间隔为3的序列(363, 360, 357...3),并获取对应效率值。核心问题是原数据存在重复RPM、乱序的情况,直接插值会出问题,先处理数据再插值即可解决。

步骤1:数据预处理

原数据中RPM有重复值(如357出现多次)、甚至乱序(比如91之后出现98),首先要对数据去重,然后按RPM降序排序,保证自变量是有序的,这样插值结果才可靠。

import pandas as pd

# 你的原始数据
data = {'rpm': [363, 362, 361, 360, 359, 358, 357, 356, 357, 354, 357, 356, 354, 351, 350, 349, 348, 347, 346, 345, 344, 342, 340, 339, 338, 337, 334, 332, 330, 329, 327, 325, 324, 321, 319, 317, 316, 313, 310, 308, 299, 288, 275, 265, 256, 247, 239, 230, 220, 209, 207, 200, 191, 182, 172, 164, 156, 148, 141, 135, 128, 121, 111, 110, 91, 98, 87, 74, 79, 76, 68, 50, 51, 50, 51, 41, 24, 0], 
        'eff': [30.0, 44.7, 55.0, 65.5, 71.85, 75.8, 79.05, 82.25, 81.0, 87.7, 85.8, 87.2, 87.0, 89.0, 88.2, 88.4, 89.0, 90.8, 89.6, 89.3, 89.6, 89.56666666666668, 89.8, 87.9, 89.2, 90.7, 88.0, 88.3, 88.6, 89.4, 87.2, 86.7, 85.6, 85.4, 85.3, 85.4, 85.1, 86.0, 84.5, 83.8, 82.9, 81.8, 80.7, 79.6, 78.8, 77.8, 77.0, 75.9, 74.7, 73.5, 73.2, 72.2, 70.6, 69.1, 67.4, 65.9, 64.2, 62.4, 60.7, 59.1, 57.2, 55.5, 52.0, 51.8, 44.6, 48.1, 43.8, 39.0, 41.4, 40.3, 36.8, 28.4, 29.1, 28.1, 28.9, 23.7, 1.6, 0.0]}
df = pd.DataFrame(data)

# 去重:对相同RPM保留最后一条(或用mean取平均值,按需选择)
df_clean = df.drop_duplicates(subset='rpm', keep='last')
# 按RPM降序排序
df_clean = df_clean.sort_values('rpm', ascending=False).reset_index(drop=True)

步骤2:生成目标固定间隔RPM序列

生成从363开始,步长为-3,直到3的序列:

# 生成目标RPM序列
target_rpm = pd.Series(range(363, 0, -3))
# 转为DataFrame方便后续操作
target_df = pd.DataFrame({'rpm': target_rpm})

步骤3:插值获取对应效率值

将原始清理后的数据和目标序列合并,然后用线性插值填充缺失的效率值。线性插值适合这种连续变化的效率曲线,也可以根据需求选择其他插值方法(如method='cubic')。

# 合并两个DataFrame,保留所有目标RPM
merged_df = pd.merge(target_df, df_clean, on='rpm', how='left')
# 线性插值填充缺失的eff值
merged_df['eff'] = merged_df['eff'].interpolate(method='linear')

# 查看结果(前5行和后5行)
print(merged_df.head())
print(merged_df.tail())

关键说明

  • 去重时如果相同RPM有多个效率值,你可以选择保留最后一条、第一条,或者用df.groupby('rpm')['eff'].mean()取平均值,根据业务需求调整。
  • 插值方法可以更换:比如method='cubic'三次样条插值,曲线更平滑,但需要保证数据没有过多缺失;如果低RPM段数据缺失较多,线性插值更稳健。
  • 目标序列的范围可按需调整,比如需要包含0的话,把range(363, 0, -3)改成range(363, -1, -3)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:25:40