如何拆分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']})
需求对应处理逻辑
- 单个model对应单个order:保留该model下第一行不重复的记录
- 单个model对应多个order:拆分order为单个值,每行对应一个订单,匹配对应数量的不重复Item
- 订单和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
相关产品推荐
相关产品推荐

