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

如何在pandas DataFrame中生成指定格式的降序数值区间列

解决方案

你原有代码仅生成了每个数值区间的左边界值,只要同步生成对应右边界,按指定格式拼接为字符串即可,不需要复杂的嵌套逻辑。

最简可运行实现

直接用列表推导配合格式化字符串生成区间列,加round处理规避0.1步长带来的浮点精度问题:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'Ranges': [f"{round(right - 0.1, 1)} - {round(right, 1)}" 
               for right in np.arange(1, 0, -0.1)]
})

运行后列输出为:

0    0.9 - 1.0
1    0.8 - 0.9
2    0.7 - 0.8
3    0.6 - 0.7
4    0.5 - 0.6
5    0.4 - 0.5
6    0.3 - 0.4
7    0.2 - 0.3
8    0.1 - 0.2
9    0.0 - 0.1

匹配无冗余小数的目标格式

如果需要去掉整数末尾的.0,完全匹配示例输出样式,加个简单的格式化判断即可:

def fmt_range(right_val):
    left = round(right_val - 0.1, 1)
    # 整数值转int类型,去掉冗余小数位
    left = int(left) if left.is_integer() else left
    right_val = int(right_val) if right_val.is_integer() else right_val
    return f"{left} - {right_val}"

df = pd.DataFrame({
    'Ranges': [fmt_range(x) for x in np.arange(1, 0, -0.1)]
})

最终输出和预期完全一致:

0      0.9 - 1
1      0.8 - 0.9
2      0.7 - 0.8
3      0.6 - 0.7
4      0.5 - 0.6
5      0.4 - 0.5
6      0.3 - 0.4
7      0.2 - 0.3
8      0.1 - 0.2
9        0 - 0.1

注意事项

  • 所有涉及0.1步长的浮点运算建议统一加round(1)处理,避免出现0.9000000001、0.7999999999这类浮点存储误差导致的显示异常
  • 如果需要用pandas向量化写法替代列表推导,可以直接对Series做运算拼接,性能基本一致:
right_s = pd.Series(np.arange(1, 0, -0.1)).round(1)
df = pd.DataFrame({
    'Ranges': (right_s - 0.1).astype(str) + ' - ' + right_s.astype(str)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:12:24