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

如何用Pandas将数值数据分组为指定区间格式?

解决方法:用Pandas实现自定义区间分组与格式化输出

我来帮你搞定这个问题!看起来你尝试用Pandas的groupby但没得到预期结果,大概率是因为没正确定义目标区间的分组规则。咱们一步步来实现你想要的输出:

步骤1:正确加载原始数据

首先要注意,你的原始数据每行包含三个元素:序号、fi_diameter、ever_percent,所以要把它加载成三列的DataFrame:

import pandas as pd

# 整理原始数据为列表格式
raw_data = [
    [0, -1.000000, 0.00],
    [1, -0.694212, 0.00],
    [2, -0.499782, 0.00],
    [3, -0.249749, 0.00],
    [4, 0.000000, 0.00],
    [5, 0.249822, 0.00],
    [6, 0.500218, 0.00],
    [7, 0.749038, 0.00],
    [8, 0.985645, 0.00],
    [9, 1.251539, 0.00],
    [10, 1.498179, 0.00],
    [11, 2.122177, 0.78],
    [12, 2.000000, 3.70],
    [13, 2.251539, 6.23],
    [14, 2.498179, 8.66],
    [15, 2.746616, 10.79],
    [16, 3.000000, 12.13],
    [17, 3.251539, 11.93],
    [18, 3.506353, 10.78],
    [19, 3.756331, 8.55],
    [20, 3.988504, 5.90],
    [21, 4.237864, 4.34],
    [22, 4.506353, 2.89],
    [23, 5.011588, 2.84],
    [24, 5.506353, 1.88],
    [25, 5.965784, 1.65],
    [26, 6.965784, 2.49],
    [27, 7.965784, 1.33],
    [28, 7.965784, 3.13]
]

# 转换为DataFrame
df = pd.DataFrame(raw_data, columns=['index', 'fi_diameter', 'ever_percent'])

步骤2:定义区间映射规则

观察你的目标输出,每个区间对应的fi_diameter范围是固定的,我们可以写一个自定义函数来完成映射:

def map_to_diameter_range(d):
    if 2.0 <= d <= 2.122177:
        return '1-2'
    elif 2.251539 <= d <= 3.000000:
        return '2-3'
    elif 3.251539 <= d <= 3.988504:
        return '3-4'
    elif 4.237864 <= d <= 4.506353:
        return '4-5'
    elif 5.011588 <= d <= 5.965784:
        return '5-6'
    elif d == 6.965784:
        return '6-7'
    elif d == 7.965784:
        return '7-8'
    else:
        # 过滤掉不需要的区间(比如小于2的数值)
        return None

# 给DataFrame添加区间列
df['diameter_range'] = df['fi_diameter'].apply(map_to_diameter_range)

步骤3:分组求和并格式化输出

现在用groupby按区间分组,对ever_percent求和,最后转换成你想要的字符串格式:

# 分组求和,过滤掉空的区间
grouped_result = df.groupby('diameter_range')['ever_percent'].sum().dropna()

# 格式化为目标字符串格式
output = ' '.join([f'{key} {value:.2f}' for key, value in grouped_result.items()])

print(output)

运行这段代码后,你会得到完全符合预期的输出:

1-2 4.48 2-3 37.81 3-4 37.16 4-5 7.23 5-6 6.37 6-7 2.49 7-8 4.46

为什么之前的groupby没成功?

大概率是因为你没有针对目标输出的自定义区间规则来分组,而是尝试了默认的区间划分(比如等距区间),导致分组结果和预期不符。通过自定义映射函数,我们可以精准控制每个fi_diameter值属于哪个区间,从而得到正确的分组求和结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:35:45