【问题标题】:Pandas groupby in combination with sklearn preprocessingPandas groupby 结合 sklearn 预处理
【发布时间】:2017-08-04 00:11:14
【问题描述】:

我想按特定列对我的 DataFrame 进行分组,然后应用 sklearn 预处理 MinMaxScaler 并存储缩放器对象。

我此刻的起点:

import pandas as pd
from sklearn import preprocessing

scaler = {}
groups = df.groupby('ID')

for name, group in groups:
  scr = preprocessing.MinMaxScaler()
  scr.fit(group)
  scaler.update({name: scr})
  group = scr.transform(group)

df.groupby('ID').transform 可以做到这一点吗?

更新

来自我原来的 DataFrame

pd.DataFrame( dict( ID=list('AAABBB'),
                    VL=(0,10,10,100,100,200))

我想根据 ID 缩放所有列。在这个例子中:

   A 0.0
   A 1.0
   A 1.0
   B 0.0
   B 0.0
   B 1.0

带有信息/缩放器对象(用fit初始化)

preprocessing.MinMaxScaler().fit( ... )

【问题讨论】:

    标签: pandas scipy


    【解决方案1】:

    你可以朝一个方向去做:

    In [62]: from sklearn.preprocessing import minmax_scale
    
    In [63]: df
    Out[63]:
      ID   VL  SC
    0  A    0   0
    1  A   10   1
    2  A   10   1
    3  B  100   0
    4  B  100   0
    5  B  200   1
    
    In [64]: df['SC'] = df.groupby('ID').VL.transform(lambda x: minmax_scale(x.astype(float)))
    
    In [65]: df
    Out[65]:
      ID   VL  SC
    0  A    0   0
    1  A   10   1
    2  A   10   1
    3  B  100   0
    4  B  100   0
    5  B  200   1
    

    但您不能使用inverse_transform,因为每次调用MinMaxScaler(对于每个组或每个ID)都会覆盖有关您的原始特征的信息...

    【讨论】:

    • 如果我想在多列上应用转换怎么办?类似的东西不起作用:gp.transform(lambda x: power_transform(x,{'method':'yeo-johnson'})) 或 gp.transform(power_transform(x,{'method':'yeo-johnson'}))
    猜你喜欢
    • 2019-06-12
    • 1970-01-01
    • 2022-01-21
    • 2016-02-07
    • 2015-06-20
    • 2020-04-14
    • 2019-11-18
    • 2023-03-22
    • 2018-10-11
    相关资源
    最近更新 更多