使用Pandas合并多列重复数据并保留排序顺序
按指定列合并条目并求和(保留原顺序):Excel 365与Pandas实现方案
Excel 365 实现方法
普通透视表会打乱原有排序,这里用动态数组函数组合实现需求:
提取保留原顺序的唯一分组
使用UNIQUE配合CHOOSECOLS提取Item、Size、Price的唯一组合,且严格保留首次出现的顺序:=UNIQUE(CHOOSECOLS(A:D,1,2,3),FALSE)其中
FALSE参数确保结果按原数据中分组的出现顺序排列。对每个分组求和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))))合并完整结果
用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参数即可保留原顺序:
读取Excel文件
import pandas as pd df = pd.read_excel("你的文件路径.xlsx")分组聚合求和
result_df = df.groupby(['Item', 'Size', 'Price'], as_index=False, sort=False)['Quantity'].sum()sort=False:禁止对分组键排序,完全保留原数据中分组首次出现的顺序as_index=False:让分组列(Item、Size、Price)保持为普通列,而非索引- 聚合后相同分组的Quantity会被求和,其余条目顺序与原数据完全一致。
保存结果(可选)
如果需要将结果写回Excel:result_df.to_excel("合并后的文件.xlsx", index=False)
内容的提问来源于stack exchange,提问作者Feng-Chun Ting
相关产品推荐
相关产品推荐

