缩放python中不同组的数值

时间:2015-08-27 21:51:50

标签: python pandas

我想根据不同的组来缩放数值(类似于R' s 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
.....

指的是这个链接:implementing R scale function in pandas in Python?我使用了def scale的功能,想要申请它,就像这样:

dt.groupby("advertiser_id").apply(scale)

但是收到错误:

ValueError:传递值的形状为(2,15770),索引暗示(2,23375)

在我的原始数据集中,行数是15770,但在我的情况下,我不认为scale函数将单个值映射到超过2(在本例中)的结果。

如果您能给我一些示例代码或一些如何修改它的建议,我将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

首先,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)恰好只包含1个项目,std将为0,您将获得nan。检查您是否因此原因nan。在这种情况下,R也会返回nan