我想根据不同的组来缩放数值(类似于 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
.....
引用此链接:implementing R scale function in pandas in Python?我使用了 def scale 的功能并想申请它,就像这样:
dt.groupby("advertiser_id").apply(scale)
但是报错:
ValueError:传递值的形状为 (2, 15770),索引表示 (2, 23375)
在我的原始数据集中,行数是 15770,但我不认为在我的情况下缩放函数将单个值映射到超过 2 个(在本例中)结果。
如果您能给我一些示例代码或一些修改建议,我将不胜感激,谢谢!
最佳答案
首先,np.std
的行为与大多数其他语言不同,因为它的增量自由度默认为 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
。
关于python - python中不同组的缩放数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260044/