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

如何拆分DataFrame的order列值并按序标记,重复项不重复标记

处理DataFrame的订单拆分与去重需求

原始数据

给定的DataFrame如下:

import pandas as pd

df = pd.DataFrame({'model':['A','A','A','A','A','B','B','B','B','C','C','C','C','C'],
           'order':['aa/ab','aa/ab','aa/ab','aa/ab','aa/ab','ba','ba','ba','ba','ca/cab/cc','ca/cb/cc','ca/cb/cc','ca/cb/cc','ca/cb/cc'],
           'Item':['tissue','paper','tea_spon','chopstick','dish','horse','dog','cat','cat','tv','radio','audio','handphone','recoder']})

需求对应处理逻辑

  1. 单个model对应单个order:保留该model下第一行不重复的记录
  2. 单个model对应多个order:拆分order为单个值,每行对应一个订单,匹配对应数量的不重复Item
  3. 订单和Item均需按原始顺序去重,避免重复显示

实现代码

def process_model_group(group):
    # 获取当前model对应的唯一订单字符串
    order_str = group['order'].iloc[0]
    # 拆分订单并按原始顺序去重
    unique_orders = list(dict.fromkeys(order_str.split('/')))
    # 获取当前model下不重复的Item(保持出现顺序)
    unique_items = list(dict.fromkeys(group['Item']))
    # 取与订单数匹配的Item数量,确保一一对应
    matched_items = unique_items[:len(unique_orders)]
    # 构造结果DataFrame
    return pd.DataFrame({
        'model': [group['model'].iloc[0]] * len(matched_items),
        'order': unique_orders[:len(matched_items)],
        'Item': matched_items
    })

# 按model分组处理,合并最终结果
result_df = df.groupby('model', group_keys=False).apply(process_model_group).reset_index(drop=True)
print(result_df)

代码说明

  • 按model分组:保证每个model的处理独立进行,互不干扰
  • dict.fromkeys():实现按原始顺序去重,既满足不重复要求,又保留元素初始出现顺序
  • 拆分订单后匹配对应数量的不重复Item:单个订单只保留第一行有效记录,多个订单则每行对应一个拆分后的订单

最终输出

运行代码后得到的结果如下:

model order        Item
0     A    aa      tissue
1     A    ab       paper
2     B    ba       horse
3     C    ca          tv
4     C   cab        radio
5     C    cc        audio

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 12:53:19