跨数据库然后跨组规范化

Normalize across DB then across Group

我尝试首先对整个 DF 中的连续变量进行归一化,然后在组内再次进行归一化。

这是一个样本 DF

       ave_win_last5  id_race
0               6.00     6734
1               3.25     6734
2               6.75     6734
3               5.50     6734
4               5.50     6734

我可以使用

在 df 内进行标准化
x_var['ave_win_last5'] = (x_var['ave_win_last5']-x_var['ave_win_last5'].mean())/x_var['ave_win_last5'].std()

但是,当我尝试在组内进行归一化时,输出都是 NAN

x_var['ave_win_last5'] = (x_var['ave_win_last5'] -x_var.groupby('id_race')['ave_win_last5'].mean())/x_var.groupby('id_race')['ave_win_last5'].std()

      ave_win_last5  id_race
0                NaN     6734
1                NaN     6734
2                NaN     6734
3                NaN     6734
4                NaN     6734

我不确定为什么会返回 NaN。

一种选择是使用 groupby.transform,并将规范化逻辑移至 transform:

df['ave_win_last5'] = df.groupby('id_race').ave_win_last5.transform(lambda s: (s - s.mean()) / s.std())

df
#   ave_win_last5  id_race
#0       0.459335     6734
#1      -1.645952     6734
#2       1.033505     6734
#3       0.076556     6734
#4       0.076556     6734