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

如何基于DataFrame生成与指定用户有≥3个共同物品的用户字典

我来帮你搞定这个需求!你要实现的是找出和指定用户有至少3个共同购买物品的其他用户,并且返回以用户ID为键、共同物品列表为值的字典,用Pandas可以很顺畅地完成这个任务,咱们一步步拆解:

步骤1:先准备测试数据(模拟你的场景)

首先我们构造一个和你举例一致的DataFrame,方便后续测试:

import pandas as pd

# 模拟用户购买数据,和你举的例子对应
data = {
    'User ID': ['U1', 'U2', 'U3', 'U2', 'U3', 'U2', 'U1', 'U1', 'U1', 'U1', 'U1', 'U3'],
    'Item': ['A', 'B', 'C', 'A', 'B', 'C', 'B', 'C', 'D', 'E', 'L', 'L']
}
df = pd.DataFrame(data)

这里U1买了A、B、C、D、E、L,U2买了A、B、C,U3买了B、C、L,完全匹配你描述的示例场景。

步骤2:提取目标用户的物品集合

先把指定用户(比如U1)买过的物品去重,存成集合——集合的交集运算比列表快得多,大数据量下优势明显:

target_user = 'U1'
# 获取目标用户的所有唯一物品
target_items = set(df[df['User ID'] == target_user]['Item'])

步骤3:分组计算共同物品并筛选符合条件的用户

接下来用groupby按用户ID分组,对每个用户的物品去重后,计算和目标用户的交集,筛选出交集长度≥3的用户:

result_dict = {}

# 遍历每个用户的分组数据
for user, group in df.groupby('User ID'):
    # 跳过目标用户自己,避免把自己算进去
    if user == target_user:
        continue
    # 获取当前用户的所有唯一物品
    user_unique_items = set(group['Item'])
    # 计算和目标用户的共同物品,转成列表
    common_items = list(user_unique_items & target_items)
    # 判断共同物品数量是否达标
    if len(common_items) >= 3:
        result_dict[user] = common_items

步骤4:查看最终结果

运行完上面的代码后,result_dict就是你想要的格式:

print(result_dict)
# 输出结果:{'U2': ['A', 'B', 'C'], 'U3': ['B', 'C', 'L']}

额外说明

  • 如果你的原始数据里有重复的「用户-物品」记录(比如同一个用户多次买同一个物品),用set去重是必须的——我们只关心用户是否买过该物品,不关心购买次数。
  • 如果需要保留物品的购买顺序(比如按首次购买时间排序),可以把集合换成去重后的列表:
    user_unique_items = list(group['Item'].unique())
    common_items = [item for item in user_unique_items if item in target_items]
    
    这种方式虽然效率稍低,但能维持物品的原始出现顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:31:30