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

如何使用Pandas GroupBy结合Grade与Height分桶计算DataFrame均值?

问题描述

现有如下格式的DataFrame df:

Grade   Height    Speed   Value
 0     A       13      0.1     500
 1     B       25      0.3     100
 2     C       54      0.6     200

需求是:以Grade为索引,将Height划分为指定区间(0-10、10-25、25-50、50-100)作为列,每个单元格计算对应Grade与Height区间组合下Speed*Value的均值,预期输出格式如下:

Height  
Grade  0-10          10-25         25-50      50-100
 A   avg(speed*value)   x            x          x
 B      x               x            x          x
 C      x               x            x          x

尝试的代码未成功:

output = pd.DataFrame(data=df, index = df[df['Grade']], columns = df[df['Height']].groupby(pd.qcut(df['Height'], 3, duplicates='drop'))).groupby(df['Value')).mean()

该代码要么报错要么返回空DataFrame,求可行解决方法。

可行解决方法

步骤1:计算Speed*Value乘积列

先新增一列存储Speed和Value的乘积,简化后续均值计算:

df['Speed_Value'] = df['Speed'] * df['Value']

步骤2:自定义Height区间

根据需求设置固定区间(而非按分位数划分的qcut),并给每个区间命名:

bins = [0, 10, 25, 50, 100]
labels = ['0-10', '10-25', '25-50', '50-100']
# right=False 表示区间左闭右开,例如10-25包含10但不包含25,可根据需求调整
df['Height_Interval'] = pd.cut(df['Height'], bins=bins, labels=labels, right=False)

步骤3:用透视表生成目标格式

使用pivot_table直接实现分组聚合,指定索引、列、聚合字段和函数:

output = df.pivot_table(index='Grade', columns='Height_Interval', values='Speed_Value', aggfunc='mean')

完整代码示例

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'Grade': ['A', 'B', 'C'],
    'Height': [13, 25, 54],
    'Speed': [0.1, 0.3, 0.6],
    'Value': [500, 100, 200]
})

# 计算Speed*Value乘积
df['Speed_Value'] = df['Speed'] * df['Value']

# 划分Height区间
bins = [0, 10, 25, 50, 100]
labels = ['0-10', '10-25', '25-50', '50-100']
df['Height_Interval'] = pd.cut(df['Height'], bins=bins, labels=labels, right=False)

# 生成目标透视表
output = df.pivot_table(index='Grade', columns='Height_Interval', values='Speed_Value', aggfunc='mean')
# 可选:将NaN替换为示例中的x
output = output.fillna('x')
print(output)

输出结果

Height_Interval 0-10 10-25 25-50 50-100
Grade                                  
A                x    50.0     x       x
B                x      x    30.0      x
C                x      x     x    120.0

原代码问题分析

  • 索引和列的定义逻辑错误:df[df['Grade']]是布尔索引,不能直接作为DataFrame索引;列的构造部分完全不符合分组逻辑;
  • 分组依据错误:最后按Value分组与需求无关,需求是按Grade和Height区间组合聚合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:54:35