python - python中不同组的缩放数值

标签 python pandas

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

相关文章:

Python - 遍历属性列表

python - 如何在 wagtail 中从 zip 存档制作图片库?

python - 在字符串中查找数字

python - PyQt:当单元格进入 QCalendarWidget 时发出信号

python - 使用Python CSV分析数据

python - 使用/Python 附加到 Pandas 数据框时保留 header

python - 在 Deedle 中使用默认值将列添加到数据框

Python:如何从 xml 获取 namespace ?

python - 使用 MultiIndex 删除 DataFrame 中的对称对

python - pandas groupby 组索引列表