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

使用Pandas按行求和并按自定义规则四舍五入至指定偶数的问询

解决方案:按规则实现Pandas行求和后自定义取整

核心思路

先计算指定列的行求和值,再分两步处理取整:

  • 对所有求和值先计算「最近偶数」(采用银行家舍入法,确保中间值取偶数)
  • 用条件判断覆盖特殊区间:若求和值落在 [0.75, 3](含边界),强制替换为2

具体代码实现

import pandas as pd
import numpy as np

# 假设你的DataFrame名为df
# 1. 计算Q1 24到Q4 24的行求和
row_sums = df.loc[:, 'Q1 24':'Q4 24'].sum(axis=1)

# 2. 计算基础最近偶数:银行家舍入法,确保中间值取偶数
base_round = np.around(row_sums / 2) * 2

# 3. 应用自定义取整规则
df['result'] = np.where(
    (row_sums >= 0.75) & (row_sums <= 3),
    2,
    base_round
).astype(int)  # 可选:转成整数类型

关键细节说明

  1. 列选择正确性:确保'Q1 24':'Q4 24'的列名和你的DataFrame完全匹配(注意空格),如果列顺序不对,可改用列名列表指定:df[['Q1 24', 'Q2 24', 'Q3 24', 'Q4 24']].sum(axis=1)
  2. 最近偶数计算逻辑:
    • 原理:将数值除以2后取最近整数,再乘回2,确保结果为偶数
    • 银行家舍入法(np.around默认规则):比如3.0除以2得1.5,会舍入为2,乘2得4,但后续条件判断会将3.0的情况强制替换为2,符合规则
  3. 条件判断覆盖边界:明确包含>=0.75和<=3,确保边界值被正确处理

测试案例验证

行求和值预期结果代码输出
0.600
0.7522
1.822
3.022
3.144
4.544
5.566

常见错误修正

如果你的原有numpy.where代码失效,大概率是以下问题:

  • 未正确计算最近偶数:比如直接用np.round(row_sums)后取偶,会导致3.0被舍入为3,再处理偶数值时出错
  • 条件判断未覆盖边界:比如写成row_sums >0.75或row_sums <3,漏掉边界值
  • 列选择错误:列名拼写或空格不对,导致求和值计算错误

内容的提问来源于stack exchange,提问作者Lynn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:38:25