如何用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
相关产品推荐
相关产品推荐

