如何基于近期购买条件调整Pandas DataFrame中的推荐项优先级?
Pandas推荐排序调整实现方案
问题背景
现有如下Pandas推荐数据集:
import pandas as pd data = { 'consumer_id': ['C001', 'C001', 'C001', 'C002', 'C002', 'C002', 'C003', 'C003', 'C003', 'C004'], 'resource_id': ['Amazon', 'Rappi', 'Magalu', 'Rappi', 'Amazon', 'Magalu', 'Amazon', 'Magalu', 'Eudora', 'Amazon'], 'resource_type': ['affiliate', 'DG', 'affiliate', 'DG', 'affiliate', 'affiliate', 'affiliate', 'affiliate', 'affiliate', 'affiliate'], 'order': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1] } df_recommendation = pd.DataFrame(data)
同时有过去90天内购买过"Magalu"的消费者列表:
users_bought = { 'consumer_id': ['C001', 'C002'] } df_users_bought = pd.DataFrame(users_bought)
需求目标
针对上述购买过"Magalu"的消费者,调整其推荐排名:将"Magalu"在该用户的resource_type为'affiliate'的推荐项中排首位,其他推荐项的原有顺序保持不变。
预期输出
- 消费者C001调整后的推荐顺序:
consumer_id resource_id resource_type order C001 Magalu affiliate 1 C001 Rappi DG 2 C001 Amazon affiliate 3
- 消费者C002调整后的推荐顺序:
consumer_id resource_id resource_type order C002 Rappi DG 1 C002 Magalu affiliate 2 C002 Amazon affiliate 3
解决方案
通过分组处理+自定义排序规则实现,步骤如下:
- 标记需要调整的目标用户
- 为目标用户设置专属排序优先级,非目标用户保持原顺序
- 重新生成排序后的
order列
实现代码:
# 标记需要调整的目标用户 df_recommendation['is_target_user'] = df_recommendation['consumer_id'].isin(df_users_bought['consumer_id']) # 定义分组排序逻辑 def sort_recommendations(group): if group['is_target_user'].iloc[0]: # 目标用户:Magalu(affiliate)排最前,其余按原order排序 group['sort_key'] = group.apply( lambda x: 0 if (x['resource_id'] == 'Magalu' and x['resource_type'] == 'affiliate') else x['order'], axis=1 ) else: # 非目标用户直接沿用原排序 group['sort_key'] = group['order'] # 按排序键排序后重置order序号 group_sorted = group.sort_values('sort_key').reset_index(drop=True) group_sorted['order'] = group_sorted.index + 1 return group_sorted.drop('sort_key', axis=1) # 按用户分组处理推荐排序 df_updated = df_recommendation.groupby('consumer_id', group_keys=False).apply(sort_recommendations) # 移除临时标记列 df_updated = df_updated.drop('is_target_user', axis=1) # 查看目标用户结果 print(df_updated[df_updated['consumer_id'] == 'C001']) print(df_updated[df_updated['consumer_id'] == 'C002'])
结果验证
运行代码后,C001、C002的推荐顺序将完全匹配预期,其余用户(如C003、C004)的推荐顺序保持原始状态不变。
内容的提问来源于stack exchange,提问作者Jplavorr
相关产品推荐
相关产品推荐

