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

如何基于含user_id与兴趣列的数据集计算两两用户兴趣交集?

实现用户对共同兴趣的配对输出

我来帮你调整代码,实现你想要的结构化输出格式~你的核心思路是对的——通过嵌套循环遍历不重复的用户对计算交集,但需要补充收集用户ID信息并整理成目标格式。下面是具体的实现方案:

步骤1:准备并预处理数据

假设你的兴趣列是列表格式,我们先把它转成集合(集合的intersection方法更适合快速计算交集):

import pandas as pd

# 构造示例数据(如果你的DataFrame已存在,这步可跳过)
data = {
    'userid': [1, 2, 3],
    'interest': [['A', 'B'], ['A', 'C', 'B'], ['B', 'D']]
}
df = pd.DataFrame(data)

# 将兴趣列表转为集合,方便后续计算交集
df['interest'] = df['interest'].apply(set)

步骤2:遍历用户对并生成目标结果

我们可以先初始化一个空列表存储每对用户的结果,最后转成DataFrame输出:

# 初始化结果容器
result_list = []

# 遍历每一对不重复的用户(i < j 避免重复计算同一对用户)
for i in range(len(df)):
    for j in range(i + 1, len(df)):
        # 获取当前用户和对比用户的ID
        current_user = df['userid'].iloc[i]
        relative_user = df['userid'].iloc[j]
        # 计算共同兴趣并转回列表(匹配你想要的输出格式)
        common_interests = list(df['interest'].iloc[i].intersection(df['interest'].iloc[j]))
        # 将这组数据加入结果列表
        result_list.append({
            'userid': current_user,
            'relativeid': relative_user,
            'common interest': common_interests
        })

# 转成DataFrame并输出
result_df = pd.DataFrame(result_list)
print(result_df)

运行结果

执行后会得到完全符合你要求的输出:

userid  relativeid common interest
0       1           2        [A, B]
1       1           3           [B]
2       2           3           [B]

可选:直接打印纯文本格式

如果你不需要DataFrame,也可以跳过转换步骤,直接在循环里按格式输出:

# 先打印表头
print("userid relativeid common interest")
for i in range(len(df)):
    for j in range(i + 1, len(df)):
        current_user = df['userid'].iloc[i]
        relative_user = df['userid'].iloc[j]
        common_interests = list(df['interest'].iloc[i].intersection(df['interest'].iloc[j]))
        print(f"{current_user} {relative_user} {common_interests}")

这样就能得到你想要的纯文本格式输出啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:31:15