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

如何将DataFrame多列按统一区间分组并生成频次统计表格

问题

现有如下结构的pandas DataFrame:

import pandas as pd
df1 = [[5,3,1,9],[0,6,2,3],[1,5,1,8],[5,6,2,8],[2,9,11,3],[0,1,1,17]]
df = pd.DataFrame(df1, columns = ['A_june', 'A_july', 'B_june', 'B_july'])

需要将所有列的数据按**0-2、2-4、4-6、6-8、8-10、10+**的统一区间分组,生成以区间为行、各列为列的频次统计表格,格式如下:

Bins      A_june   A_july   B_june   B_july
0-2
2-4
4-6
6-8
8-10
10+

尝试使用pd.cut和groupby方法,但未得到预期格式的表格,寻求解决方法。

解决方法

无需使用groupby,直接对每一列应用pd.cut后统计频次,再对齐索引即可实现需求:

  1. 定义分组区间与标签
    先明确分组的分界点和对应显示标签:
bins = [0, 2, 4, 6, 8, 10, float('inf')]
labels = ['0-2', '2-4', '4-6', '6-8', '8-10', '10+']
  1. 批量处理所有列
    用apply对每一列执行分组统计,再通过reindex确保所有区间都存在,缺失值填充0:
# 对每列做cut后统计频次,重索引对齐所有区间,填充0
result = df.apply(lambda col: pd.cut(col, bins=bins, labels=labels, include_lowest=True).value_counts())
result = result.reindex(labels).fillna(0).astype(int)
# 设置索引名称为Bins
result.index.name = 'Bins'
  1. 查看结果
    执行后result即为预期的频次表格,打印输出:
print(result)

输出结果:

A_june  A_july  B_june  B_july
Bins                                  
0-2          3       1       4       0
2-4          1       1       2       3
4-6          2       2       0       0
6-8          0       2       0       2
8-10         0       0       0       1
10+          0       0       0       1

关键说明

  • include_lowest=True确保左区间包含边界值(比如0会被分到0-2组)
  • reindex(labels)强制按指定的区间顺序排列,避免缺失区间
  • fillna(0).astype(int)把缺失的频次转为整数0,保证格式统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:01:09