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

使用Pandas合并多列重复数据并保留排序顺序

按指定列合并条目并求和(保留原顺序):Excel 365与Pandas实现方案

Excel 365 实现方法

普通透视表会打乱原有排序,这里用动态数组函数组合实现需求:

  1. 提取保留原顺序的唯一分组
    使用UNIQUE配合CHOOSECOLS提取Item、Size、Price的唯一组合,且严格保留首次出现的顺序:

    =UNIQUE(CHOOSECOLS(A:D,1,2,3),FALSE)
    

    其中FALSE参数确保结果按原数据中分组的出现顺序排列。

  2. 对每个分组求和Quantity
    用BYROW遍历每个唯一分组,配合SUMIFS计算对应分组的Quantity总和:

    =BYROW(上述唯一分组区域,LAMBDA(x,SUMIFS(D:D,A:A,INDEX(x,1),B:B,INDEX(x,2),C:C,INDEX(x,3))))
    
  3. 合并完整结果
    用HSTACK将分组列和求和列合并为最终表格:

    =HSTACK(UNIQUE(CHOOSECOLS(A:D,1,2,3),FALSE),BYROW(UNIQUE(CHOOSECOLS(A:D,1,2,3),FALSE),LAMBDA(x,SUMIFS(D:D,A:A,INDEX(x,1),B:B,INDEX(x,2),C:C,INDEX(x,3)))))
    

    最终结果会保留原数据中各分组首次出现的顺序,比如示例中Item=A、Size=1-2cm、Price=0.6的条目会合并为一行,Quantity求和为60。

Python Pandas 实现方法

你之前用groupby结果不正确,核心原因是默认groupby会对分组键排序,只需添加sort=False参数即可保留原顺序:

  1. 读取Excel文件

    import pandas as pd
    df = pd.read_excel("你的文件路径.xlsx")
    
  2. 分组聚合求和

    result_df = df.groupby(['Item', 'Size', 'Price'], as_index=False, sort=False)['Quantity'].sum()
    
    • sort=False:禁止对分组键排序,完全保留原数据中分组首次出现的顺序
    • as_index=False:让分组列(Item、Size、Price)保持为普通列,而非索引
    • 聚合后相同分组的Quantity会被求和,其余条目顺序与原数据完全一致。
  3. 保存结果(可选)
    如果需要将结果写回Excel:

    result_df.to_excel("合并后的文件.xlsx", index=False)
    

内容的提问来源于stack exchange,提问作者Feng-Chun Ting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:07:10