[英]scale numerical values for different groups in python
我想根据不同的组来缩放数值(类似于R的scale
函数)。
注意:当我谈到规模时,我指的是这个指标(x-group_mean)/group_std
数据集(用于演示想法)例如:
advertiser_id value
10 11
10 22
10 2424
11 34
11 342342
.....
理想的结果:
advertiser_id scaled_value
10 -0.58
10 -0.57
10 1.15
11 -0.707
11 0.707
.....
引用此链接: 在Python中实现pandas中的R scale函数? 我使用def scale功能并想申请它,就像这样:
dt.groupby("advertiser_id").apply(scale)
但得到一个错误:
ValueError:传递值的形状是(2,15770),索引暗示(2,23375)
在我的原始数据集中,行数是15770,但在我的情况下,我认为scale函数不会将单个值映射到超过2(在本例中)结果。
如果您能给我一些示例代码或一些如何修改它的建议,我将不胜感激,谢谢!
首先, np.std
行为与大多数其他语言不同,因为delta自由度默认为0 。 因此:
In [9]:
print df
advertiser_id value
0 10 11
1 10 22
2 10 2424
3 11 34
4 11 342342
In [10]:
print df.groupby('advertiser_id').transform(lambda x: (x-np.mean(x))/np.std(x, ddof=1))
value
0 -0.581303
1 -0.573389
2 1.154691
3 -0.707107
4 0.707107
这匹配R
结果。
第二,如果你的任何一个组(通过advertiser_id
)恰好只包含一个项目,那么std
将为0,你将得到nan
。 检查你是否因为这个原因而得到了nan
。 在这种情况下, R
也将返回nan
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.