如何用Pandas按main_col分组实现数值的Min-Max归一化(缩放至[0,100])
按组实现Min-Max归一化(最大值缩放为100)
输入数据
| main_col | some_metadata | value |
|---|---|---|
| this | True | 10 |
| this | False | 3 |
| that | True | 50 |
| that | False | 10 |
| other | True | 20 |
| other | False | 5 |
期望输出
| main_col | some_metadata | value (normalized) |
|---|---|---|
| this | True | 100 |
| this | False | 30 |
| that | True | 100 |
| that | False | 20 |
| other | True | 100 |
| other | False | 25 |
实现方法(Python pandas)
用pandas的分组+变换功能可以轻松实现,既保留原表结构,又能按组完成归一化:
import pandas as pd # 构造输入数据 data = { 'main_col': ['this', 'this', 'that', 'that', 'other', 'other'], 'some_metadata': [True, False, True, False, True, False], 'value': [10, 3, 50, 10, 20, 5] } df = pd.DataFrame(data) # 按main_col分组,将每组value的最大值缩为100,其余值按比例计算 df['value (normalized)'] = df.groupby('main_col')['value'].transform( lambda x: (x / x.max()) * 100 ) # 输出结果 print(df[['main_col', 'some_metadata', 'value (normalized)']])
逻辑说明
groupby('main_col'):按main_col的不同取值分成独立小组transform:将每个小组的计算结果映射回原DataFrame的对应行,保证原表的行顺序和结构不变- 归一化公式:
(当前值 / 组内最大值) * 100,直接把组内最大值转为100,其他值按比例缩放
内容的提问来源于stack exchange,提问作者Maxim Skoryk
相关产品推荐
相关产品推荐

