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

如何用Pandas按Group分组添加Cost列的分组求和列?

在Pandas中实现分组求和并添加合并列显示

当然可行!作为Pandas新手,这个需求其实可以通过两步轻松实现:先计算每个分组的Cost求和值并添加为新列,再通过样式设置实现你想要的合并单元格显示效果。下面是具体步骤:

1. 构造示例数据集

首先我们先把你提供的数据转换成Pandas DataFrame:

import pandas as pd

# 构造数据集
data = {
    'Group': ['G1', 'G2', 'G3', 'G3', 'G4', 'G5', 'G5', 'G5'],
    'Cost': [1574, 1322, 1188, 942, 838, 5, 4, 3],
    'Name1': ['N1A', 'N1B', 'N1C', 'N1D', 'N1E', 'N1F', 'N1F', 'N1G'],
    'Name2': ['N2A', 'N2B', 'N2C', 'N2D', 'N2E', 'N2F', 'N2G', 'N2H']
}
df = pd.DataFrame(data)

2. 添加分组求和的Sum列

这里我们用groupby结合transform方法,它会把每个分组的求和结果广播到该分组的每一行,完美匹配你的需求:

# 按Group分组计算Cost的求和,添加为Sum列
df['Sum'] = df.groupby('Group')['Cost'].transform('sum')
# 调整列顺序,让Sum列移到Cost前面,和你期望的结果一致
df = df[['Group', 'Sum', 'Cost', 'Name1', 'Name2']]

此时你的DataFrame已经拥有了正确的Sum值,但默认打印时还不会合并相同分组的单元格,接下来我们处理显示样式。

3. 设置合并单元格的显示样式

如果需要像你给出的示例那样合并相同Group和Sum的单元格,可以使用Pandas的Styler工具(适合在Jupyter Notebook或网页中展示):

def merge_group_cells(df):
    # 创建样式对象
    styler = df.style
    # 设置单元格居中对齐
    styler.set_table_styles([
        {'selector': 'th, td', 'props': [('text-align', 'center')]}
    ])
    # 隐藏索引列,匹配示例格式
    styler.hide(axis='index')
    # 对Group和Sum列,相同值的单元格隐藏顶部边框,实现视觉上的合并
    for col in ['Group', 'Sum']:
        styler.apply(
            lambda series: [
                'border-top: none' if i > 0 and series.iloc[i] == series.iloc[i-1] else ''
                for i in range(len(series))
            ],
            subset=col
        )
    return styler

# 展示处理后的表格
merge_group_cells(df)

补充说明

  • 如果只需要数据层面的Sum列(不需要合并显示的视觉效果),完成前两步就足够了,此时的DataFrame已经包含了正确的分组求和值。
  • transform是这里的关键:它和agg不同,agg只会返回每个分组的一行结果,而transform会保留原DataFrame的行数,把分组计算结果对应到每一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:57:29