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

如何基于近期购买条件调整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

解决方案

通过分组处理+自定义排序规则实现,步骤如下:

  1. 标记需要调整的目标用户
  2. 为目标用户设置专属排序优先级,非目标用户保持原顺序
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:46:18