繁体   English   中英

缩放python中不同组的数值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM