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

如何在groupby操作中/之后合并多行并累加对应数值?

实现特定成绩行的合并与求和

针对你已经通过groupby得到的math_comparison_size(带两级索引的Series),可以通过以下几种方式实现A和A+的合并求和:

方法1:转DataFrame后映射分组

这是最直观的方式,适合需要后续调整其他成绩分组的场景:

# 1. 将原Series转为DataFrame,方便处理
df = math_comparison_size.reset_index(name='Student_Count')

# 2. 定义成绩合并规则
grade_mapping = {
    'A': 'A/A+',
    'A+': 'A/A+'
    # 其他成绩如B、C等无需映射,会自动保留原名称
}

# 3. 生成合并后的成绩列,未映射的成绩保持原样
df['Combined_Grade'] = df['Math.SemGrade'].replace(grade_mapping)

# 4. 重新按学术分组和合并后的成绩分组求和
merged_result = df.groupby(['Academic Group', 'Combined_Grade'])['Student_Count'].sum()

方法2:直接在原Series上操作

如果不想转DataFrame,可以直接对索引进行映射后分组:

# 定义成绩合并逻辑
def combine_grade(grade):
    return 'A/A+' if grade in ('A', 'A+') else grade

# 对原Series的第二级索引(成绩)做映射,再分组求和
merged_result = math_comparison_size.groupby(
    [
        math_comparison_size.index.get_level_values(0),  # 保留学术分组索引
        math_comparison_size.index.get_level_values(1).map(combine_grade)  # 映射成绩
    ]
).sum()

示例效果

假设你的原math_comparison_size输出为:

Academic Group  Math.SemGrade
Group A         A                7
                A+              21
                B               15
Group B         A                5
                A+              18
dtype: int64

处理后merged_result会变成:

Academic Group  Combined_Grade
Group A         A/A+             28
                B                15
Group B         A/A+             23
dtype: int64

如果需要将结果硬编码到作业表格中,可以用merged_result.to_markdown()生成Markdown表格格式(需先安装tabulate库:pip install tabulate)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:01:21