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

在Pandas/Numpy中实现距离值向最近binsize倍数取整的简便方法

问题描述

我有一个包含float64类型距离值的DataFrame,示例代码如下:

import numpy as np
import pandas as pd
binsize = 0.05
df = pd.DataFrame()
df['distance'] = [0.01555, 0.6, 0.99, 1.24] 

输出结果为:

distance
0   0.01555
1   0.60000
2   0.99000
3   1.24000

我希望将该列的最小值和最大值取整到最接近的binsize倍数,目前的实现方式是:

np.round(np.round(df['distance'].min() / binsize) * binsize, 2)
np.round(np.round(df['distance'].max() / binsize) * binsize, 2)

此方法会得到0.0和1.25的结果,请问是否有更简便的实现方式?

简化实现方案

以下几种方式可以达到相同效果,且代码更简洁:

方式1:合并round操作

不需要嵌套两层np.round(),先完成倍数取整,再统一处理小数位数即可:

min_val = np.round(df['distance'].min() / binsize) * binsize
max_val = np.round(df['distance'].max() / binsize) * binsize
# 处理浮点数精度,保留两位小数
min_val = np.round(min_val, 2)
max_val = np.round(max_val, 2)

运行后同样得到0.0和1.25的结果。

方式2:使用pandas内置round方法

利用DataFrame列的round()方法,逻辑和方式1一致,更贴合pandas使用场景:

min_val = (df['distance'].min() / binsize).round() * binsize
max_val = (df['distance'].max() / binsize).round() * binsize
min_val = min_val.round(2)
max_val = max_val.round(2)

补充说明

如果遇到浮点数精度异常(比如出现0.05000000000000001这类结果),可以直接用np.around()或者字符串格式化修正,但上述方法已经能覆盖大部分常规场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:12:58