如何用Pandas按列将0-5范围数据缩放到0-4范围?
Pandas按列将0-5范围数据缩放到0-4的最优方法
核心思路
原数据范围为0-5,目标范围是0-4,最直接高效的处理方式是线性映射,公式为:缩放后值 = (原始值 / 5) * 4
该方法能完整保留数据的相对比例,同时精准贴合目标范围,结合Pandas的矢量化操作可实现最高处理效率。
代码实现
- 构造示例DataFrame:
import pandas as pd data = { 'a': [0, 5, 1, 3], 'b': [2, 4, 4, 4], 'c': [5, 3, 2, 0] } df = pd.DataFrame(data)
- 执行缩放(最优矢量化方案):
# 直接对整列进行批量计算,无需循环 scaled_df = df * (4/5)
执行后结果:
| a | b | c | |
|---|---|---|---|
| 0 | 0 | 1.6 | 4 |
| 1 | 4 | 3.2 | 2.4 |
| 2 | 0.8 | 3.2 | 1.6 |
| 3 | 2.4 | 3.2 | 0 |
- 可选:转为整数类型
如果需要整数结果,可根据需求选择处理方式:
# 直接截断小数转为整数 scaled_df_int = (df * (4/5)).astype(int) # 四舍五入后转为整数 scaled_df_round = (df * (4/5)).round().astype(int)
- 可选:限制值在目标范围内
若担心原数据存在超出0-5的异常值,可添加范围约束:
scaled_df = (df * (4/5)).clip(0, 4)
方案优势
- 效率最优:基于numpy的矢量化操作避免了逐行循环,处理大规模数据集时速度远超自定义循环逻辑。
- 代码简洁:一行代码完成整表缩放,可读性强,维护成本低。
- 比例保留:线性映射不会破坏原数据的相对分布,完美适配这种因录入错误导致范围偏移的场景。
内容的提问来源于stack exchange,提问作者Saulti23
相关产品推荐
相关产品推荐

