2015-09-01 99 views
1

我想一個重新調整列添加到這個數據幀:大熊貓 - GROUPBY和重度值

I,Value 
A,1 
A,4 
A,2 
A,5 
B,1 
B,2 
B,1 

,使新柱(我們稱之爲scale),遵循了對於value列的函數每組I。該功能只是在爲每個組範圍內的標準化:

lambda x: (x-min(x))/(max(x)-min(x)) 

到目前爲止,我嘗試:

d = df.groupby('I').apply(lambda x: (x-min(x))/(max(x)-min(x))) 

接收以下類型錯誤:

TypeError: Could not operate array(['A'], dtype=object) with block values index 1 is out of bounds for axis 1 with size 1 

回答

2

如果您添加的「價值'列到您的代碼然後它將工作:

In [69]: 
df.groupby('I')['Value'].apply(lambda x: (x-min(x))/(max(x)-min(x))) 

Out[69]: 
0 0.00 
1 0.75 
2 0.25 
3 1.00 
4 0.00 
5 1.00 
6 0.00 
dtype: float64 

熊貓方法版本如下,產生相同的結果:

In [67]: 
df['Normalised'] = df.groupby('I')['Value'].apply(lambda x: (x-x.min())/(x.max()-x.min())) 
df 

Out[67]: 
    I Value Normalised 
0 A  1  0.00 
1 A  4  0.75 
2 A  2  0.25 
3 A  5  1.00 
4 B  1  0.00 
5 B  2  1.00 
6 B  1  0.00