Pandas:按组标准化值

Max*_*ryk 5 python dataframe pandas data-science data-wrangling

我发现很难用语言解释我想要实现的目标,所以请不要因为我展示了一个简单的例子而评判我。我有一个看起来像这样的表:

主列 一些元数据 价值
真的 10
错误的 3
真的 50
错误的 10
其他 真的 20
其他 错误的 5

我想针对 的每种情况分别标准化这些数据main_col。例如,如果我们选择最小-最大归一化并将其缩放到范围 [0; 100],我希望输出如下所示:

主列 一些元数据 值(标准化)
真的 100
错误的 30
真的 100
错误的 20
其他 真的 100
其他 错误的 25

其中对于 的每种情况main_col,最高值缩放为 100,另一个值按相应比例缩放。

moz*_*way 5

您可以用来groupby.transform('max')获取每组的最大值,然后就地标准化:

df['value'] /= df.groupby('main_col')['value'].transform('max').div(100)
Run Code Online (Sandbox Code Playgroud)

或者:

df['value'] *= df.groupby('main_col')['value'].transform('max').rdiv(100)
Run Code Online (Sandbox Code Playgroud)

输出:

  main_col  some_metadata  value
0     this           True  100.0
1     this          False   30.0
2     that           True  100.0
3     that          False   20.0
4    other           True  100.0
5    other          False   25.0
Run Code Online (Sandbox Code Playgroud)