You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python条件式取整:按规则将数值取整至最近偶数

问题分析与优化方案

当前代码存在的问题

  1. 第一个lambda逻辑完全颠倒:原代码将小于0.6的数值取整为int(x),大于0.6的设为0,与需求完全相反。
  2. 第二个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)

代码逻辑说明

  1. 小于0.6的数值:直接返回0,符合规则要求。
  2. 大于等于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:40:34