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

如何合并名称相似后缀不同的数据集行?NetSuite/Python实现

解决方案

一、NetSuite 搜索实现方案

NetSuite 可通过自定义公式字段+分组汇总实现需求,步骤如下:

1. 添加自定义公式字段

在搜索结果中新增两个公式字段:

  • 前缀公式(文本型):提取主Item名称,处理X/Y/Z后缀的情况
    CASE WHEN REGEXP_SUBSTR({name}, '-[XYZ]$') IS NOT NULL THEN SUBSTR({name}, 1, LENGTH({name})-2) ELSE {name} END
    
  • 后缀公式(文本型):标记后缀类型,非X/Y/Z的记录标记为Main
    CASE WHEN REGEXP_SUBSTR({name}, '-[XYZ]$') IS NOT NULL THEN REGEXP_SUBSTR({name}, '[XYZ]$') ELSE 'Main' END
    

2. 配置分组与汇总规则

  • 搜索结果标签页中,将「前缀公式」设为分组字段,同时保留原Name和Description(选择取每组第一条记录的对应值)
  • 对Onhand字段添加4个汇总公式:
    • Available:SUM(CASE WHEN {custformula_suffix} = 'Main' THEN {onhand} ELSE 0 END)
    • Available-X:SUM(CASE WHEN {custformula_suffix} = 'X' THEN {onhand} ELSE 0 END)
    • Available-Y:SUM(CASE WHEN {custformula_suffix} = 'Y' THEN {onhand} ELSE 0 END)
    • Available-Z:SUM(CASE WHEN {custformula_suffix} = 'Z' THEN {onhand} ELSE 0 END)

3. 调整列顺序

将汇总后的列调整为目标输出的顺序,即可得到所需结果。

二、Python Pandas 实现方案

若NetSuite搜索无法满足需求,可通过Pandas高效处理:

1. 加载原始数据

import pandas as pd

data = [
    ["ItemA", "aaaa-bb", 1],
    ["ItemA-X", "aaaa-bb-x", 3],
    ["ItemA-Y", "aaaa-bb-y", 1],
    ["ItemA-Z", "aaaa-bb-z", 2],
    ["ItemB", "bbbb-00", 0],
    ["ItemB-X", "bbbb-00-x", 3],
    ["ItemB-Y", "bbbb-00-y", 0],
    ["ItemC-X", "cccc-01-x", 2],
    ["ItemD-D", "ddd-01-d", 2],
]
df = pd.DataFrame(data, columns=["Name", "Description", "Onhand"])

2. 拆分前缀与后缀

# 提取后缀(仅匹配-X/-Y/-Z)
df["Suffix"] = df["Name"].str.extract(r'-([XYZ])$', expand=False).fillna("Main")
# 提取前缀
df["Prefix"] = df.apply(lambda row: row["Name"][:-2] if row["Suffix"] != "Main" else row["Name"], axis=1)

3. 透视表转换与合并

# 按前缀和后缀汇总Onhand值
pivot = df.pivot_table(index="Prefix", columns="Suffix", values="Onhand", aggfunc="sum", fill_value=0)
# 重命名列
pivot = pivot.rename(columns={
    "Main": "Available",
    "X": "Available-X",
    "Y": "Available-Y",
    "Z": "Available-Z"
})
# 合并原表的基础信息(取每组第一条记录)
main_info = df.drop_duplicates("Prefix", keep="first")[["Prefix", "Name", "Description"]]
result = main_info.merge(pivot, on="Prefix").drop("Prefix", axis=1)

4. 调整列顺序并输出

# 匹配目标列顺序
result = result[["Name", "Description", "Available", "Available-X", "Available-Y", "Available-Z"]]
print(result.to_markdown(index=False))

内容的提问来源于stack exchange,提问作者yumpo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:52:07