pandas 一次缩放多列并使用groupby()进行逆变换 [英] Pandas scale multiple columns at once and inverse transform with groupby()

查看:100
本文介绍了 pandas 一次缩放多列并使用groupby()进行逆变换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个如下所示的数据框。我想在x_data和y_data的多列上应用两个MinMaxscalers,然后逆变换应该给我实际值。请为此提供建议和帮助。谢谢

I have a dataframe like below.I want to apply two MinMaxscalers on x_data ad y_data on multiple columns and then inverse transform should give me the actual values.Please suggest and help me on this.Thanks in advance

DataFrame:

DataFrame:

                 X_data                             y_data       
   Customer     0      1      2      3       Customer      0      1
0    A         855.0  989.0  454.0  574.0        A       395.0  162.0
1    A         989.0  454.0  574.0  395.0        A       162.0  123.0
2    A         454.0  574.0  395.0  162.0        A       123.0  342.0
3    A         574.0  395.0  162.0  123.0        A       342.0  232.0
4    A         395.0  162.0  123.0  342.0        A       232.0  657.0
5    B         875.0  999.0  434.0  564.0        B       345.0  798.0
6    B         999.0  434.0  564.0  345.0        B       798.0  815.0
7    B         434.0  564.0  345.0  798.0        B       815.0  929.0
8    B         564.0  345.0  798.0  815.0        B       929.0  444.0
9    B         345.0  798.0  815.0  929.0        B       444.0  554.0
10   B         798.0  815.0  929.0  444.0        B       554.0  395.0
11   B         815.0  929.0  444.0  554.0        B       395.0  768.0

我可以使用MinMaxScaler在下面的一行中为一列做该操作,但我想

I can do it for one column using MinMaxScaler with below line but i want to make it for multiple columns

    #to get multilevel to single level
      X_data.columns = list(X_data.columns.levels[1])
      #scaling per user
      scaled_xdata = X_data.groupby('Customer')[0].transform(lambda s: x_scaler.fit_transform(s.values.reshape(-1,1)).ravel())
   #storing into the df
    scaled_xdata =pd.concat([X_data[['Customer']] , scaled_xdata] , axis=1)

我想对数据进行逆变换以获得多列的实际值。我尝试过一列

I would like to perform inverse transform on the data to get the actual values for multple columns.here is the code which i tried for one column

  scaled_xdata_inv = scaled_xdata.groupby('Customer')[0].transform(lambda s: x_scaler.inverse_transform(s.values.reshape(-1,1)).ravel())
scaled_xdata_inv  =pd.concat([X_data[['Customer']] , scaled_xdata_inv] , axis=1)
scaled_xdata_inv

inverse_transform之后,Customer A的0列输出错误,并且Customer获得正确的值B.您能帮我吗

After inverse_transform , The output for 0 column is wrong for Customer A and got right values for Customer B.can you please help me on this

输出:

Customer    0
0   A   851.464646
1   A   999.000000
2   A   409.959596
3   A   542.080808
4   A   345.000000
5   B   875.000000
6   B   999.000000
7   B   434.000000
8   B   564.000000
9   B   345.000000
10  B   798.000000
11  B   815.000000


推荐答案

MinMaxScalar 可以接受多个 pandas 数值系列一次并缩放列方式,因此您只需执行以下操作即可:

The MinMaxScalar can accept multi pandas numeric serieses at once, and scales them column-wise, so you can simply do:

x_scaler = MinMaxScaler()
scaled_xdata = x_scaler.fit_transform(df.iloc[:, 1:])
scaled_xdata_inv = x_scaler.inverse_transform(scaled_xdata)

不需要 groupby s或 lambda s

这篇关于 pandas 一次缩放多列并使用groupby()进行逆变换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆