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

如何将DataFrame中数值列四舍五入至最近偶数?

将DataFrame数值四舍五入至最近偶数的解决方案

你的核心需求是把DataFrame的数值列四舍五入到最近偶数,当前代码的问题在于误用了round()方法的参数——pandas的round()接受的是小数位数参数,而非要计算的数值。

正确实现方法

方法1:向量化操作(高效推荐)

直接对数值列执行「除以2 → 四舍五入 → 乘以2」的向量化运算,避免逐行循环:

# 先将ID设为索引,隔离非数值列
df_indexed = df.set_index('ID')
# 执行四舍五入到最近偶数的计算
df_rounded = (df_indexed / 2).round() * 2

方法2:apply逐列处理

如果需要更灵活的自定义逻辑,也可以用apply遍历数值列:

df_rounded = df.set_index('ID').apply(lambda col: round(col / 2) * 2)

验证结果

运行上述代码后,得到的结果完全符合你的期望:

Q121  Q221  Q321  Q421  Q122  Q222  Q322  Q422
ID                                                  
AA    6.0  10.0   6.0  12.0   6.0   8.0   4.0   8.0
BB    8.0   6.0   4.0   6.0   8.0   8.0   6.0   8.0

错误代码分析

你之前写的df.set_index(['ID']).round(df/2)*2存在逻辑错误:round()的参数应该是小数位数(比如round(2)表示保留两位小数),而你传入了df/2这个DataFrame对象,这完全不符合方法的参数要求,因此无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:25:24