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

如何用Python将DataFrame每行求和后取最近的偶数?

计算DataFrame每行求和并四舍五入到最近偶数

需求

计算DataFrame每行的求和值,并将该值四舍五入到最接近的偶数。

输入数据

id  type    Q1 22   Q2 22   Q3 22   Q4 22  
AA  hi      0.2     0.8     0.3     2.1      
AA  hello   0.2     0.7     0.3     1.7     
AA  ok      2       0.1     0       0.1     

期望结果

id  type    Q1 22   Q2 22   Q3 22   Q4 22  rounded_nearest_sum
AA  hi      0.2     0.8     0.3     2.1    4
AA  hello   0.2     0.7     0.3     1.7    2
AA  ok      2       0.1     0       0.1    2    

当前代码

df.loc[:,'rounded_nearest_sum'] = df.sum(axis=1)

解决方案

你需要先精准计算每行数值列的和,再通过逻辑转换得到最接近的偶数。核心思路是用「数值/2 → 四舍五入 → ×2」的方式实现需求,同时要避免对非数值列求和:

import pandas as pd
import numpy as np

# 计算每行数值列的和(跳过前两列非数值列)
row_sums = df.iloc[:, 2:].sum(axis=1)
# 生成最接近的偶数
df['rounded_nearest_sum'] = np.round(row_sums / 2) * 2
# 转换为整数类型匹配期望格式
df['rounded_nearest_sum'] = df['rounded_nearest_sum'].astype(int)

逻辑说明

  • df.iloc[:, 2:]:明确选取第3列及之后的数值列求和,排除id、type这类非数值列干扰。
  • np.round(row_sums / 2) * 2:通过缩放后四舍五入再还原的方式,精准得到距离原数最近的偶数,完全匹配你的期望结果:
    • 第一行求和值3.4 → 3.4/2=1.7 → 四舍五入为2 → 2×2=4
    • 第二行求和值2.9 → 2.9/2=1.45 → 四舍五入为1 → 1×2=2
    • 第三行求和值2.2 → 2.2/2=1.1 → 四舍五入为1 → 1×2=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 15:15:45