此帖子的继续: Pandas groupby in combination with sklearn preprocessing
我需要通过按两列缩放分组数据来进行预处理,因此第二种方法会出现一些错误
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数组:array = [0. 10。 100]。如果数据具有单个功能,则使用array.reshape(-1,1)重整数据;如果包含单个特征,则使用array.reshape(1,-1)重整数据。 单个样本。
如果我使用重塑,则会出现如下错误:
例外:数据必须是一维的
如果我打印出分组数据,则g['value']
是熊猫系列。
for n, g in df.groupby(['id','loc']):
print(type(g['value']))
你知道是什么原因造成的吗?
谢谢。
答案 0 :(得分:1)
根据警告代码,您应添加reshape
和concatenate
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