我想根据不同的组来缩放数值(类似于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(在本例中)的结果。
如果您能给我一些示例代码或一些如何修改它的建议,我将不胜感激,谢谢!
答案 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
。