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

