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