2016-04-03 45 views
1

正常化的数值列我试图用下面的代码在python数据帧正常化柱:Python的数据帧:使用lambda

df['x_norm'] = df.apply(lambda x: (x['X'] - x['X'].mean())/(x['X'].max() - x['X'].min()),axis=1) 

但得到了以下错误:

df['x_norm'] = df.apply(lambda x: (x['X'] - x['X'].mean())/(x['X'].max() - x['X'].min()),axis=1) 
AttributeError: ("'float' object has no attribute 'mean'", u'occurred at index 0') 

有谁知道我在这里错过了什么?谢谢!

+0

请问您能否提供样本数据集(5-7行)和预期输出? – MaxU

回答

0

我假设你正在使用熊猫

除了应用于整个DataFrame(Documentation)之外,还可以预先计算平均值,最大值和最小值。事情是这样的:

avg = df['X'].mean() 
diff = df['X'].max() - df['X'].min() 
new_df = df['X'].apply(lambda x: (x-avg)/diff) 

如果您正在寻找正常化整个数据帧校验这个answer

df.apply(lambda x: (x - np.mean(x))/(np.max(x) - np.min(x))) 
0

如果你想在X列正常化值:

df['x_norm'] = df.X.div(df.X.sum()) 

的步骤步骤:

In [65]: df 
Out[65]: 
    a b X 
0 2 1 5 
1 1 4 5 
2 7 4 7 
3 1 6 6 
4 5 5 8 
5 5 8 2 
6 6 7 5 
7 8 2 5 
8 7 9 9 
9 9 6 5 

In [68]: df['x_norm'] = df.X.div(df.X.sum()) 

In [69]: df 
Out[69]: 
    a b X x_norm 
0 2 1 5 0.087719 
1 1 4 5 0.087719 
2 7 4 7 0.122807 
3 1 6 6 0.105263 
4 5 5 8 0.140351 
5 5 8 2 0.035088 
6 6 7 5 0.087719 
7 8 2 5 0.087719 
8 7 9 9 0.157895 
9 9 6 5 0.087719 

检查:

In [70]: df.x_norm.sum() 
Out[70]: 1.0