范围来自数据框中多列的 MinMaxScaler

MinMaxScaler with range from multiple columns in dataframe

我有一个 OHLC 数据框(开盘价、最高价、最低价、收盘价),用于每分钟的传感器数据。我需要缩放值,但所有值都具有相同的比例。比例尺需要使用四列中任意一列的最小值和最大值。例如,最小值可以在 'Low' 列中,最大值可以在 'High' 列中。基于该范围 (min(df['low']) - max(df['high'])),我想安装洁牙器。

我目前正在使用 sklearn.preprocessing 的 MinMaxScaler。但是,我只能将它放入一列。因此,如果我将它放入 df['open'] 列并转换另一列,则值不再介于 0 和 1 之间,而是可以是 < 0 和 > 1.

如何使用定标器中所有列的完整范围?

您可以通过自己进行数学运算来标准化所有列,使用 df.min().min()df.max().max() 获取整个数据帧的最小值和最大值,或者更简单地说 df['Low'].min()df['High'].max() 分别从 LowHigh 列中获取 minimum/maximum 值。例如:

df = pd.DataFrame({
  'Open': [1, 1.1, 0.9, 0.9],
  'High': [1.2, 1.2, 1.1, 1.3],
  'Low': [1, 1.0, 0.8, 0.7],
  'Close': [1.1, 1.2, 0.8, 1.2] 
})
df
#    Open  High  Low  Close
# 0   1.0   1.2  1.0    1.1
# 1   1.1   1.2  1.0    1.2
# 2   0.9   1.1  0.8    0.8
# 3   0.9   1.3  0.7    1.2

min = df.min().min()    # df['Low'].min()
max = df.max().max()    # df['High'].max()
norm = (df - min) / (max - min)
norm
#        Open      High       Low     Close
# 0  0.500000  0.833333  0.500000  0.666667
# 1  0.666667  0.833333  0.500000  0.833333
# 2  0.333333  0.666667  0.166667  0.166667
# 3  0.333333  1.000000  0.000000  0.833333

如果有人最终访问此页面,我实际上找到了另一种方法,即使用 Numpy 重塑数据并将其输入缩放器。重塑并根据我的问题排序创建一个新的数据框:

import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler

#kudo's to Nick, I used his df to illustrate my example.
df = pd.DataFrame({
  'Open': [1, 1.1, 0.9, 0.9],
  'High': [1.2, 1.2, 1.1, 1.3],
  'Low': [1, 1.0, 0.8, 0.7],
  'Close': [1.1, 1.2, 0.8, 1.2] 
})

scaler = MinMaxScaler()
df_np = scaler.fit_transform(df.to_numpy().reshape(-1,1))
df = pd.DataFrame(df_np.reshape(4,-1), columns=df.columns)

#   Open    High    Low Close
# 0 0.500000    0.833333    0.500000    0.666667
# 1 0.666667    0.833333    0.500000    0.833333
# 2 0.333333    0.666667    0.166667    0.166667
# 3 0.333333    1.000000    0.000000    0.833333