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

如何高效合并DataFrame同Type值行?求和并保留首行信息

按Type分组合并数据集的高效实现方法

核心实现代码

先创建示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Name': ['A', 'B', 'C', 'D'],
    'Type': ['X', 'X', 'Y', 'Z'],
    'Profit': [10, 20, 50, 10],
    'Cost': [5, 13, 29, 8],
    'Year': [2012, 2013, 2013, 2014]
})

执行分组聚合:

# 按Type分组,聚合规则:首行Name/Year + 求和Profit/Cost
result = df.groupby('Type', as_index=False).agg(
    Name=('Name', 'first'),
    Profit=('Profit', 'sum'),
    Cost=('Cost', 'sum'),
    Year=('Year', 'first')
)[['Name', 'Type', 'Profit', 'Cost', 'Year']]

输出结果:

Name Type  Profit  Cost  Year
0    A    X      30    18  2012
1    C    Y      50    29  2013
2    D    Z      10     8  2014

关键细节说明

  • groupby('Type', as_index=False):按Type列分组,as_index=False确保Type保持为普通列而非索引
  • agg()方法:为每个列指定聚合逻辑:
    • 'first':取每组第一行的对应值(即组内最上方的Name和Year)
    • 'sum':对组内的Profit和Cost数值求和
  • 最后调整列顺序,和原数据集结构一致

保留原组首行索引(可选)

如果需要保留原数据中每组第一行的索引(如示例结果中的1、3、4),可以先将索引存入临时列,处理后再恢复:

# 保存原索引
df['original_idx'] = df.index

# 分组聚合并恢复原索引
result = df.groupby('Type').agg(
    original_idx=('original_idx', 'first'),
    Name=('Name', 'first'),
    Profit=('Profit', 'sum'),
    Cost=('Cost', 'sum'),
    Year=('Year', 'first')
).set_index('original_idx')[['Name', 'Type', 'Profit', 'Cost', 'Year']]

输出结果:

Name Type  Profit  Cost  Year
original_idx                             
1              A    X      30    18  2012
3              C    Y      50    29  2013
4              D    Z      10     8  2014

效率说明

这种方法基于Pandas的矢量化分组聚合操作,避免了循环遍历,处理大数据集时效率远高于逐行处理,是Pandas中处理此类需求的标准高效方案。

内容的提问来源于stack exchange,提问作者dark-walrus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:40:13