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

如何处理表格中重复的Service Code行,保留指定记录?

按Service Code去重并保留指定优先级行的实现方法

原始表格(存在重复Service Code行):

Service Code    Amount  Flag1   Flag2
1111    8100    5       YES      TOP
2222    8004    10      YES     OTHER
2222    8004    10      YES     TOP
3333    8502    2       NO      OTHER
4444    1015    7       YES     OTHER
4444    1015    7       NO      OTHER
5555    7104    12      YES     OTHER
5555    7104    12       YES    OTHER

目标:按Service Code去重,保留规则为:

  • 同一Service Code下,优先保留Flag2为TOP的行(如2222)
  • 无TOP时,优先保留Flag1为YES的行(如4444)
  • 完全重复的行直接去重(如5555)
    最终结果:
Service Code    Amount  Flag1   Flag2
1111    8100    5       YES     TOP
2222    8004    10      YES     TOP
3333    8502    2       NO      OTHER
4444    1015    7       YES     OTHER
5555    7104    12       YES    OTHER

方法1:Excel实现

  • 步骤1:添加辅助列(比如E列),输入优先级赋值公式:
    =IF(D2="TOP",3,IF(C2="YES",2,1))
    
    逻辑:Flag2为TOP的行优先级最高(赋值3),Flag1为YES的次之(赋值2),其余赋值1。
  • 步骤2:选中所有数据(含表头),点击「数据」→「排序」,设置规则:
    • 主要关键字:Service Code,升序
    • 次要关键字:辅助列,降序
  • 步骤3:排序完成后,点击「数据」→「删除重复值」,仅勾选Service Code列,确认后即可得到目标结果。

方法2:Python(Pandas)实现

  • 代码示例(适配制表符分隔的文本/CSV):
    import pandas as pd
    
    # 加载数据,按实际存储路径调整
    df = pd.read_csv("your_data.txt", sep="\t")
    
    # 生成优先级列
    df['priority'] = df.apply(
        lambda x: 3 if x['Flag2'] == 'TOP' else 2 if x['Flag1'] == 'YES' else 1,
        axis=1
    )
    
    # 按Service Code升序、优先级降序排序
    df_sorted = df.sort_values(by=['Service Code', 'priority'], ascending=[True, False])
    
    # 按Service Code去重,保留优先级最高的第一行
    df_result = df_sorted.drop_duplicates(subset='Service Code', keep='first').drop(columns='priority')
    
    # 输出结果,可保存为文件
    print(df_result.to_csv(sep="\t", index=False))
    

方法3:命令行awk实现

  • 适用于处理制表符分隔的文本文件,执行以下命令:
    awk 'BEGIN{FS=OFS="\t"} NR==1{print; next} {
        current_prio = ($4 == "TOP" ? 3 : ($3 == "YES" ? 2 : 1));
        if (!($1 in map)) {
            map[$1] = current_prio "\t" $0;
        } else {
            split(map[$1], arr, "\t");
            if (current_prio > arr[1]) {
                map[$1] = current_prio "\t" $0;
            }
        }
    } END{for (code in map) {split(map[code], arr, "\t"); print arr[2]}}' your_data.txt | sort -n -k1
    
  • 逻辑:用数组存储每个Service Code的最高优先级行,最后按Service Code升序输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:10:19