如何用Pandas按自定义规则将数组浮点值向上取整
自定义NumPy数组浮点值向上取整实现方案
直接用NumPy的向量化操作就能高效实现你的自定义取整规则,不用写循环,处理大数组也快。
实现思路
把数组里的每个数拆成整数部分和小数部分,然后根据小数部分的范围分三种情况处理:
- 小数部分在
0.1 ~ 0.49之间:取整后为「整数部分 + 0.5」 - 小数部分在
0.51 ~ 0.99之间:取整后为「整数部分 + 1」 - 小数部分为
0.0或0.5:保持原数不变
完整代码
import numpy as np # 原数组 arr = np.array([32.5 , 32.49, 32.48, 32.47, 32.46, 32.45, 32.44, 32.43, 32.42, 32.41, 32.4 , 32.39, 32.38, 32.37, 32.36, 32.35, 32.34, 32.33, 32.32, 32.31, 32.3 , 32.29, 32.28, 32.27, 32.26, 32.25, 15.75, 15.76, 15.77, 15.78, 15.79, 15.8 , 15.81, 15.82, 15.83, 15.84, 15.85, 15.86, 15.87, 15.88, 15.89, 15.9 , 15.91, 15.92, 15.93, 15.94, 15.95, 15.96, 15.97, 15.98, 15.99, 16. , 16.01, 16.02, 16.03, 16.04, 16.05, 16.06, 16.07, 16.08, 16.09, 16.1 , 16.11, 16.12, 16.13, 16.14, 16.15, 16.16, 16.17, 16.18, 16.19, 16.2 , 16.21, 16.22, 16.23, 16.24, 16.25, 16.26, 16.27, 16.28, 16.29, 16.3 , 16.31, 16.32, 16.33, 16.34, 16.35, 16.36, 16.37, 16.38, 16.39, 16.4 , 16.41, 16.42, 16.43, 16.44, 16.45, 16.46, 16.47, 16.48, 16.49, 16.5 , 25.25, 25.5 , 25.51, 25.52, 25.53, 25.54, 25.55, 25.56, 25.57, 25.58, 25.59, 25.6 , 25.61, 25.62, 25.63, 25.64, 25.65, 25.66, 25.67, 25.68, 25.69, 25.7 , 25.71, 25.72, 25.73, 25.74, 26. , 26.01, 26.02, 26.03, 26.04, 26.05, 26.06, 26.07, 26.08, 26.09, 26.1 , 26.11, 26.12, 26.13, 26.14, 26.15, 26.16, 26.17, 26.18, 26.19, 26.2 , 26.21, 26.22, 26.23, 26.24, 26.25, 26.26, 26.27, 26.28, 26.29, 26.3 , 26.31, 26.32, 26.5 , 26.49, 26.48, 26.47, 26.46, 26.45, 26.44, 26.43, 26.42, 26.41, 26.4 , 26.39, 26.38, 26.37, 26.36, 26.35, 26.34, 26.33, 28.5 , 28.51, 28.52, 28.53, 28.54, 28.55, 28.56, 28.57, 28.58, 28.59, 28.6 , 28.61, 28.62, 28.63, 28.64, 28.65, 28.66, 30.5 , 30.49, 30.48, 30.47, 30.46, 30.45, 30.44, 30.43, 30.42, 30.41, 30.4 , 30.39, 30.38, 30.37, 30.36, 30.35, 30.34, 30.33, 30.32, 30.31, 30.3 , 30.29, 30.28, 30.27, 30.26, 30.25]) # 拆分小数部分和整数部分 frac_part, int_part = np.modf(arr) # 初始化结果数组,默认保留原数 result = arr.copy() # 处理小数部分0.1~0.49的情况 mask1 = (frac_part >= 0.1) & (frac_part <= 0.49) result[mask1] = int_part[mask1] + 0.5 # 处理小数部分0.51~0.99的情况 mask2 = (frac_part >= 0.51) & (frac_part <= 0.99) result[mask2] = int_part[mask2] + 1 # 查看结果 print(result)
关键说明
np.modf():专门用来拆分浮点数的小数和整数部分,返回的两个数组和原数组维度一致,适合向量化操作- 掩码操作:用布尔数组筛选符合条件的元素,批量赋值,比循环效率高很多,尤其适合处理大数组
- 边界值处理:原数组里的
32.5、16.0这类本身就是整数或0.5的数值,会直接保留,符合需求
内容的提问来源于stack exchange,提问作者Sushil Kokil
相关产品推荐
相关产品推荐

