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

如何通过Pandas GroupBy实现两列不同分箱的联合计数统计?

实现多列不同分箱规则的分组计数

直接给你可行的代码方案,不用拆分DataFrame,一次groupby就能搞定:

import pandas as pd

data = [
    {'a': 11, 'b': 1},
    {'a': 22, 'b': 1},
    {'a': 25, 'b': 5},
    {'a': 11, 'b': 1},
    {'a': 22, 'b': 2},
    {'a': 15, 'b': 6},
]

df = pd.DataFrame(data)

# 定义两列各自的分箱区间
a_bins = [10, 20, 30]
b_bins = [1, 5, 10]

# 同时按a列分箱和b列分箱的结果分组,统计每组数量
result = df.groupby([
    pd.cut(df['a'], a_bins),
    pd.cut(df['b'], b_bins)
]).size().unstack(fill_value=0)

print(result)

运行后会得到直观的二维统计结果:

b          (1, 5]  (5, 10]
a                         
(10, 20]        2        1
(20, 30]        2        1

关键说明:

  • 直接把两个pd.cut的分箱结果作为groupby的参数,就能实现双重分箱分组,一次完成统计
  • 用size()比count()更直接,专门用来统计每组的行数
  • 最后用unstack(fill_value=0)把多级索引结果转成二维表格,fill_value=0用来填充无数据的分组(避免出现NaN)

如果不需要二维表格,保留多级索引格式的话,去掉.unstack(fill_value=0)即可:

result = df.groupby([pd.cut(df['a'], a_bins), pd.cut(df['b'], b_bins)]).size()

结果为:

a         b        
(10, 20]  (1, 5]     2
          (5, 10]    1
(20, 30]  (1, 5]     2
          (5, 10]    1
dtype: int64

这样就完全不用拆分DataFrame,一步到位实现你要的统计需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:37:11