基于Campaign分组识别重复记录并生成带action字段的结果请求
需求实现方案
一、重复记录识别与过滤规则
- Campaign名称拆分逻辑:将Campaign按
{prefix + keyword + suffix}拆分,关键词固定为shoes、apparel、watch。例如Gen_X_Shoes_TTU_Bing拆分后:- prefix:
Gen_X(关键词之前的部分,去除末尾下划线) - keyword:
shoes(匹配到的目标关键词) - suffix:
TTU_Bing(关键词之后的部分,去除开头下划线)
- prefix:
- 重复判定标准:两条记录满足以下全部条件则视为重复:
- Campaign的
prefix + suffix完全一致 advertiser、shopid、customerid字段完全相同
- Campaign的
- 去重保留规则:同一重复组内,按关键词优先级(1. Shoes > 2. Apparel > 3. Watch)保留优先级最高的一条记录
示例输入
adverstiser | shopid | campaign | customerid ABC1 | XYZ1 | Gen_X_Shoes_TTU_Bing | cust123 ABC1 | XYZ1 | Gen_X_Apparel_TTU_Bing | cust123 ABC2 | XYZ2 | Zen_X_Watch_SKU_Gogl | cust456 ABC2 | XYZ2 | Zen_X_Apparel_SKU_Gogl | cust456 ABC3 | XYZ3 | Gen_Z_Watch_INL_Gogl | cust567
去重后示例输出
adverstiser | shopid | campaign | customerid ABC1 | XYZ1 | Gen_X_Shoes_TTU_Bing | cust123 ABC2 | XYZ2 | Zen_X_Apparel_SKU_Gogl | cust456 ABC3 | XYZ3 | Gen_Z_Watch_INL_Gogl | cust567
二、最终结果生成规则
将去重后的每条记录复制为两条,新增action字段,分别赋值为set和ready
实现方案(Python + Pandas)
以下是基于Python Pandas库的代码实现,适用于结构化表格数据处理:
import pandas as pd # 1. 加载输入数据(示例数据) data = { 'adverstiser': ['ABC1', 'ABC1', 'ABC2', 'ABC2', 'ABC3'], 'shopid': ['XYZ1', 'XYZ1', 'XYZ2', 'XYZ2', 'XYZ3'], 'campaign': ['Gen_X_Shoes_TTU_Bing', 'Gen_X_Apparel_TTU_Bing', 'Zen_X_Watch_SKU_Gogl', 'Zen_X_Apparel_SKU_Gogl', 'Gen_Z_Watch_INL_Gogl'], 'customerid': ['cust123', 'cust123', 'cust456', 'cust456', 'cust567'] } df = pd.DataFrame(data) # 2. 拆分Campaign字段,提取prefix、keyword、suffix target_keywords = ['shoes', 'apparel', 'watch'] def parse_campaign(campaign_str): campaign_lower = campaign_str.lower() for kw in target_keywords: if kw in campaign_lower: split_parts = campaign_lower.split(kw) prefix = split_parts[0].rstrip('_') suffix = split_parts[1].lstrip('_') return prefix, kw, suffix return None, None, None # 无匹配关键词的情况可根据需求自定义处理 df[['prefix', 'keyword', 'suffix']] = df['campaign'].apply(lambda x: pd.Series(parse_campaign(x))) # 3. 转换关键词为优先级数值(数值越小优先级越高) priority_rank = {'shoes': 1, 'apparel': 2, 'watch': 3} df['priority'] = df['keyword'].map(priority_rank) # 4. 分组去重:按指定字段分组,保留优先级最高的记录 df_deduplicated = df.sort_values('priority').groupby( ['adverstiser', 'shopid', 'customerid', 'prefix', 'suffix'], as_index=False ).first() # 5. 生成带action字段的最终结果 action_list = ['set', 'ready'] final_df = df_deduplicated.loc[df_deduplicated.index.repeat(len(action_list))].reset_index(drop=True) final_df['action'] = action_list * len(df_deduplicated) # 筛选输出字段并打印结果 output_columns = ['adverstiser', 'shopid', 'campaign', 'customerid', 'action'] print(final_df[output_columns].to_string(index=False))
代码输出结果
adverstiser shopid campaign customerid action ABC1 XYZ1 Gen_X_Shoes_TTU_Bing cust123 set ABC1 XYZ1 Gen_X_Shoes_TTU_Bing cust123 ready ABC2 XYZ2 Zen_X_Apparel_SKU_Gogl cust456 set ABC2 XYZ2 Zen_X_Apparel_SKU_Gogl cust456 ready ABC3 XYZ3 Gen_Z_Watch_INL_Gogl cust567 set ABC3 XYZ3 Gen_Z_Watch_INL_Gogl cust567 ready
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

