【问题标题】:Normalize across DB then across Group跨数据库规范化,然后跨组规范化
【发布时间】:2021-06-18 12:47:46
【问题描述】:

我正在尝试首先对整个 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 在 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。

【问题讨论】:

    标签: python pandas dataframe normalize


    【解决方案1】:

    一种选择是使用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
    

    【讨论】:

    • 这适用于组内规范化,但是,当我首先在数据库内规范化然后在组内进行规范化时,我得到的结果与我刚刚在组内规范化一样。
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 2012-10-08
    • 2012-06-21
    相关资源
    最近更新 更多