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

如何使用Python groupby实现按区间统计生成数据汇总表

Python groupby区间条件统计实现方案

核心思路

利用pandas分组聚合时,布尔值求和等价于符合条件的记录计数的特性,直接在agg方法中定义各区间的统计逻辑。

完整可运行代码

import pandas as pd

# ---------------------- 1. 加载数据 ----------------------
# 测试用模拟数据,实际使用时替换为你的数据读取逻辑,比如 pd.read_csv("你的文件路径")
data = [
    ['Delhi', 'del51-del63', 15.11],
    ['Delhi', 'del51-del63', 17],
    ['Delhi', 'del51-del63', 34.82285714],
    ['Delhi', 'del51-del63', 34.82285714],
    ['Mumbai', 'mum1012-mum233', 42],
    ['Mumbai', 'mum412-mum2121', 42.15],
    ['Mumbai', 'mum1012-mum245', 58.82285714],
    ['Mumbai', 'mum10-mum2121', 77.52],
    ['Delhi', 'del51-del61', 81],
    ['Delhi', 'del51-del62', 88],
    ['Mumbai', 'mum1012-mum2121', 95]
]
df = pd.DataFrame(data, columns=['Circle', 'Link', 'Utilization'])

# ---------------------- 2. 分组聚合统计 ----------------------
result = df.groupby('Circle').agg(
    # 统计每个Circle的总记录数
    Link_count = ('Utilization', 'count'),
    # 统计各区间的数量,用**解包字典兼容含特殊符号的列名
    **{'<50': ('Utilization', lambda x: sum(x < 50))},
    **{'>=50 & <80': ('Utilization', lambda x: sum((x >= 50) & (x < 80)))},
    **{'>=80': ('Utilization', lambda x: sum(x >= 80))}
).reset_index()

# ---------------------- 3. 输出结果 ----------------------
print(result)
# 如果需要导出为表格格式可以用:result.to_csv("统计结果.csv", index=False)

输出结果验证

运行代码后得到的结果和预期完全一致:

CircleLink_count<50>=50 & <80>=80
Delhi6402
Mumbai5221

扩展方案(多区间场景更友好)

如果后续需要统计的区间更多,可以用pd.cut先给每条记录打区间标签再统计,代码更简洁:

# 定义区间和对应标签
bins = [-float('inf'), 50, 80, float('inf')]
labels = ['<50', '>=50 & <80', '>=80']
df['区间'] = pd.cut(df['Utilization'], bins=bins, labels=labels)

# 分组统计
result = df.groupby('Circle').agg(Link_count=('区间', 'count'))\
    .join(df.groupby(['Circle', '区间']).size().unstack(fill_value=0))\
    .reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:15:02