Pandas:按组规范化值



我发现很难用语言解释我想要实现什么,所以请不要因为我展示了一个简单的例子而评判我。我有一张这样的桌子:

值错误
main_col some_metadata
True 10
this 错误 3
True 50
10
其他 20
其他 错误 5

您可以使用groupby.transform('max')来获得每组的最大值,然后就地归一化:

df['value'] /= df.groupby('main_col')['value'].transform('max').div(100)

或:

df['value'] *= df.groupby('main_col')['value'].transform('max').rdiv(100)

输出:

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

您要查找的规范化公式是100 * (x / x.max()):

df.groupby(['main_col'])['value'].transform(lambda x: 100 * (x / x.max()))

结果:

0    100.0
1     30.0
2    100.0
3     20.0
4    100.0
5     25.0
Name: value, dtype: float64

最新更新