跨数据库然后跨组标准化

问题描述

我试图首先在整个 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