Python条件式取整:按规则将数值取整至最近偶数
问题分析与优化方案
当前代码存在的问题
- 第一个
lambda逻辑完全颠倒:原代码将小于0.6的数值取整为int(x),大于0.6的设为0,与需求完全相反。 - 第二个
lambda逻辑片面:仅处理整数的奇数转偶数场景,未考虑浮点数的最近偶数计算,也未覆盖0.6、1.0这类需要特殊调整的数值。
优化后的代码实现
import pandas as pd # 构造原始数据 data = { 'ID': ['AA', 'BB'], 'Q121': [0.1, 0.2], 'Q221': [0.5, 0.6], 'Q321': [6.6, 3.1], 'Q421': [11.4, 5.3], 'Q122': [6.8, 7.2], 'Q222': [1.9, 1.8], 'Q322': [1, 0.9] } df = pd.DataFrame(data) # 定义符合规则的取整函数 def round_to_rule(x): if x < 0.6: return 0 # 计算最近偶数:先将数值除以2取整,再乘以2还原为偶数 nearest_even = round(x / 2) * 2 # 针对0.6、0.9这类最近偶数为0的情况,统一返回2以匹配期望结果 return 2 if nearest_even == 0 else nearest_even # 将函数应用到所有数值列 df.iloc[:, 1:] = df.iloc[:, 1:].applymap(round_to_rule) # 输出结果 print(df)
代码逻辑说明
- 小于0.6的数值:直接返回0,符合规则要求。
- 大于等于0.6的数值:
- 通过
round(x/2)*2计算最近的偶数,利用Python的round函数实现四舍五入到最近的0.5,再乘以2还原为偶数(例如11.4→round(5.7)=6→62=12;6.6→round(3.3)=3→32=6)。 - 针对0.6、0.9这类计算后最近偶数为0的特殊场景,强制返回2,完全匹配期望输出。
- 通过
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

