如何将Pandas DataFrame中的风电功率数据归一化至0.6-8.4的指定区间?
解决方案:将0-1归一化结果映射到指定区间
你已经搞定了核心的0-1归一化步骤,接下来只需要通过线性映射就能把结果转换到0.6到8.4的目标区间。这个逻辑很简单:先把0-1区间的归一化值放大到目标区间的长度,再平移到目标区间的起始点。
具体公式
假设:
normalized_01:你已经得到的0-1范围归一化值min_target:目标区间最小值(这里是0.6)max_target:目标区间最大值(这里是8.4)
转换公式为:
normalized_target = normalized_01 * (max_target - min_target) + min_target
完整代码实现
结合你的现有代码,完整的实现如下:
import pandas as pd from pandas import Timestamp # 初始化你的原始DataFrame df = pd.DataFrame( { 'DateTime': { 0: Timestamp('2022-02-08 00:00:00'), 1: Timestamp('2022-02-08 00:10:00'), 2: Timestamp('2022-02-08 00:20:00'), 3: Timestamp('2022-02-08 00:30:00'), 4: Timestamp('2022-02-08 00:40:00') }, 'wind power [W]': {0: 83.9, 1: 57.2, 2: 58.2, 3: 48.0, 4: 69.5} } ) # 第一步:0-1归一化(你的原有代码) df['normalized_01'] = (df['wind power [W]'] - df['wind power [W]'].min()) / (df['wind power [W]'].max() - df['wind power [W]'].min()) # 第二步:映射到0.6-8.4区间 min_target = 0.6 max_target = 8.4 df['normalized_target'] = df['normalized_01'] * (max_target - min_target) + min_target # 查看结果 print(df[['DateTime', 'wind power [W]', 'normalized_target']])
结果验证
运行代码后,你可以看到:
- 原最小值48.0对应的
normalized_target是0.6,完全符合要求 - 原最大值83.9对应的
normalized_target是8.4,正确映射 - 中间值会按比例分布在0.6到8.4之间,比如57.2会被映射到约2.6,符合线性比例
内容的提问来源于stack exchange,提问作者Kats
相关产品推荐
相关产品推荐

