如何高效合并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
相关产品推荐
相关产品推荐

