如何将相同Code的多行数据转换为含重复CaseNumber、Discount列的结构?
Hey,这个需求完全能搞定!我给你分享两种实用的实现方法,分别适配Python(用Pandas库)和Excel场景,你可以按需选择:
方案1:Python Pandas 实现
如果你习惯用代码处理数据,Pandas是个非常高效的选择:
- 先把原始数据转换成标准的DataFrame格式(原始数据是空格分隔的,我们先拆分并整理成三列):
import pandas as pd # 原始数据,按空格拆分后每3个元素为一行 raw_data = "123 1 10 123 2 20 123 3 30 456 4 40 456 5 50 456 6 60".split() rows = [raw_data[i:i+3] for i in range(0, len(raw_data), 3)] df = pd.DataFrame(rows, columns=["Code", "CaseNumber", "Discount"])
- 按
Code分组,把每组的CaseNumber和Discount拼接成连续的字符串,再和Code组合:
# 定义分组后的聚合函数 def concat_rows(group): # 先把CaseNumber和Discount两两配对,再拼接成空格分隔的字符串 pairs = [f"{cn} {d}" for cn, d in zip(group["CaseNumber"], group["Discount"])] # 把Code和所有配对结果拼接在一起 return f"{group['Code'].iloc[0]} {' '.join(pairs)}" # 分组聚合并输出结果 result = df.groupby("Code").apply(concat_rows).tolist() # 打印最终结果,每个Code对应一行 for line in result: print(line)
运行这段代码后,就能得到你想要的输出:
123 1 10 2 20 3 30 456 4 40 5 50 6 60
方案2:Excel 实现
如果你更习惯用Excel处理表格,可以这样操作:
先把原始数据粘贴到Excel中,整理成三列(A列:Code,B列:CaseNumber,C列:Discount),确保6行数据正确对应。
在D列提取唯一的Code值:在D2单元格输入
=UNIQUE(A2:A7),回车后会自动生成唯一的Code列表(123和456)。在E列拼接对应的数据:在E2单元格输入以下公式,然后按Ctrl+Shift+Enter(旧版Excel),或者直接回车(新版Excel支持动态数组):
=TEXTJOIN(" ", TRUE, IF($A$2:$A$7=D2, $B$2:$C$7, ""))
这个公式会筛选出所有和D2单元格Code匹配的CaseNumber和Discount,并用空格拼接成连续的字符串。
- 最后把D列和E列的内容合并(比如在F2单元格输入
=D2&" "&E2),就能得到你想要的单行格式啦。
内容的提问来源于stack exchange,提问作者neualex
相关产品推荐
相关产品推荐

