【问题标题】:Group by MinMaxScaler in pandas dataframe在熊猫数据框中按 MinMaxScaler 分组
【发布时间】:2021-08-11 20:50:47
【问题描述】:

我想将 minmax 缩放器应用于数据框 df 中的 X2 和 X3 列,并为每个月添加 X2_Scale 和 X3_Scale 列。

df = pd.DataFrame({
    'Month': [1,1,1,1,1,1,2,2,2,2,2,2,2],
    'X1': [12,10,100,55,65,60,35,25,10,15,30,40,50],
    'X2': [10,15,24,32,8,6,10,23,24,56,45,10,56],
    'X3': [12,90,20,40,10,15,30,40,60,42,2,4,10]
})

下面的代码是我尝试过的,但出错了。

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()

cols = df.columns[2:4]
df[cols + 'scale'] = df.groupby('Month')[cols].scaler.fit_transform(df[cols])

我该怎么做?谢谢。

【问题讨论】:

    标签: python pandas scikit-learn sklearn-pandas


    【解决方案1】:

    方法一

    使用缩放函数对列X2X3 进行分组和转换,该函数应用最小-最大缩放转换并返回缩放值

    def scale(X):
        X_ = np.atleast_2d(X)
        return pd.DataFrame(scaler.fit_transform(X_), X.index)
    
    df[cols + '_scale'] = df.groupby('Month')[cols].apply(scale)
    

    方法2

    让我们坚持基础,从对应的列 X2X3 计算每个组的 minmax 值,然后使用计算的最小值-最大值将缩放公式应用于列

    g = df.groupby('Month')[cols]
    min_, max_ = g.transform('min'), g.transform('max')
    df[cols + '_scale'] = (df[cols] - min_) / (max_ - min_)
    

    结果

        Month   X1  X2  X3  X2_scale  X3_scale
    0       1   12  10  12  0.153846  0.025000
    1       1   10  15  90  0.346154  1.000000
    2       1  100  24  20  0.692308  0.125000
    3       1   55  32  40  1.000000  0.375000
    4       1   65   8  10  0.076923  0.000000
    5       1   60   6  15  0.000000  0.062500
    6       2   35  10  30  0.000000  0.482759
    7       2   25  23  40  0.282609  0.655172
    8       2   10  24  60  0.304348  1.000000
    9       2   15  56  42  1.000000  0.689655
    10      2   30  45   2  0.760870  0.000000
    11      2   40  10   4  0.000000  0.034483
    12      2   50  56  10  1.000000  0.137931
    

    【讨论】:

      猜你喜欢
      • 2019-10-14
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 2018-07-19
      • 2019-05-15
      • 2017-10-17
      • 1970-01-01
      相关资源
      最近更新 更多