Excel多行转多列:将同InvoiceNo交易商品合并至同一行
嘿,我完全懂你想要把同一发票号下的所有商品合并到一行的需求——数据透视表确实搞不定这个场景,给你两个靠谱的方案,一个用Excel自带功能,另一个用Python快速处理你的大数据集(毕竟54万条记录,Excel函数可能有点卡):
方案1:Excel内置函数组合(适合小到中等数据集)
如果你的Excel是365/2021及以上版本,用UNIQUE+TEXTJOIN就能快速搞定:
- 第一步:先提取唯一发票号列表。在空白单元格(比如新工作表的A2)输入
=UNIQUE(原数据!$A$2:$A$540381),回车后会自动生成所有不重复的InvoiceNo。 - 第二步:合并对应商品。在B2单元格输入:
这里的参数解释:=TEXTJOIN("、", TRUE, IF(原数据!$A$2:$A$540381=A2, 原数据!$B$2:$B$540381, ""))"、"是你想要的分隔符,换成逗号也可以TRUE表示忽略空值,避免出现多余分隔符IF函数用来匹配当前发票号对应的所有商品描述
- 第三步:下拉B列公式,所有发票号对应的合并商品列表就出来了。
注:如果是Excel 2019及更早版本,这个是数组公式,输入完需要按
Ctrl+Shift+Enter才能生效。
方案2:Python Pandas处理(适合大数据集,效率更高)
面对54万条记录,Excel函数可能会卡顿,用Pandas处理速度会快很多:
- 先安装依赖(如果没装的话,在命令行输入
pip install pandas openpyxl) - 编写代码:
import pandas as pd # 读取你的Excel数据,替换成你的文件路径和工作表名 df = pd.read_excel("你的购物篮数据.xlsx", sheet_name="Sheet1") # 按InvoiceNo分组,合并商品描述,用中文顿号分隔 merged_result = df.groupby("InvoiceNo")["Description"].agg("、".join).reset_index() # 把结果保存到新的Excel文件 merged_result.to_excel("合并后的购物篮数据.xlsx", index=False)
运行完代码,你就能得到一个新Excel文件,里面就是每个发票号对应一行、商品用分隔符连起来的格式,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Semih
相关产品推荐
相关产品推荐

