Pandas groupby与sklean预处理组合继续

Pandas groupby与sklean预处理组合继续,pandas,scikit-learn,Pandas,Scikit Learn,从本帖继续: 我需要通过按两列缩放分组数据来进行预处理,但第二种方法会出现一些错误 import pandas as pd import numpy as np from sklearn.preprocessing import robust_scale,minmax_scale df = pd.DataFrame( dict( id=list('AAAAABBBBB'), loc = (10,20,10,20,10,20,10,20,10,20),

从本帖继续:

我需要通过按两列缩放分组数据来进行预处理,但第二种方法会出现一些错误

import pandas as pd
import numpy as np
from sklearn.preprocessing import robust_scale,minmax_scale

df = pd.DataFrame( dict( id=list('AAAAABBBBB'),
                loc = (10,20,10,20,10,20,10,20,10,20),
                value=(0,10,10,20,100,100,200,30,40,100)))

df['new'] = df.groupby(['id','loc']).value.transform(lambda x:minmax_scale(x.astype(float) ))

df['new'] = df.groupby(['id','loc']).value.transform(lambda x:robust_scale(x ))
第二个给我这样的错误:

ValueError:应为2D数组,而应为1D数组:数组=[0.10]。 100.]. 使用数组重塑数据。如果数据具有单个特征,则重塑(-1,1)或数组。如果数据包含单个特征,则重塑(1,-1) 单一样本

如果使用“重塑”,则会出现如下错误:

例外:数据必须是一维的

如果我打印出分组的数据,
g['value']
就是一个系列

for n, g in df.groupby(['id','loc']):
    print(type(g['value']))
你知道是什么引起的吗


谢谢。

根据警告代码,您应该添加
重塑
串联

df.groupby(['id','loc']).value.transform(lambda x:np.concatenate(robust_scale(x.values.reshape(-1,1))))
Out[606]: 
0   -0.2
1   -1.0
2    0.0
3    1.0
4    1.8
5    0.0
6    1.0
7   -2.0
8   -1.0
9    0.0
Name: value, dtype: float64

对我来说很好。您使用的是哪个版本的pd,np?我使用的是Python3.4。为什么需要使用concatenate?我想也许我对底层的numpy理解得不太好。@newleaf这个输出是数组,如果你不做concat if将输出对象,