多维度分组分箱需求:按Type与YearlyAvg区间分组统计
解决多维度分组统计问题
没问题,你只需要在groupby里同时传入Type字段和YearlyAvg的区间分组结果就行,这样就能实现按每个独立Type下的YearlyAvg区间来统计数据了。
修改后的代码
# 按Type + YearlyAvg区间分组,统计所有字段的数量 result = df.groupby(['Type', pd.cut(df['YearlyAvg'], np.arange(0,1250,50))]).count() # 更推荐:只统计ID的数量(避免冗余统计,结果更简洁) result = df.groupby(['Type', pd.cut(df['YearlyAvg'], np.arange(0,1250,50))])['ID'].count()
代码解释
['Type', pd.cut(...)]):把Type作为第一个分组维度,YearlyAvg的区间作为第二个维度,这样每个Type都会单独划分YearlyAvg区间进行统计,完全满足你区分Type维度的需求。- 指定统计
ID字段是因为我们只关心每组的样本数量,这样不会重复统计Total、TotalDate等无关字段,结果更干净高效。
示例输出(基于你提供的两行测试数据)
用第二个代码片段的话,输出会是这样的结构:
Type YearlyAvg AT267 (200, 250] 1 PQ43 (0, 50] 1 Name: ID, dtype: int64
进阶:整理结果格式(方便后续构建蒙特卡洛分布)
如果想把结果转换成更易读的普通DataFrame,方便后续分析或可视化,可以加上reset_index()并给统计列命名:
result = df.groupby(['Type', pd.cut(df['YearlyAvg'], np.arange(0,1250,50))])['ID'].count().reset_index(name='SampleCount')
转换后的结果会是标准的表格形式:
| Type | YearlyAvg | SampleCount |
|---|---|---|
| AT267 | (200, 250] | 1 |
| PQ43 | (0, 50] | 1 |
这样就能完美满足你多维度分组统计的需求,后续可以直接基于这个结果构建蒙特卡洛分布啦。
内容的提问来源于stack exchange,提问作者Dylan Smith
相关产品推荐
相关产品推荐

