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