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

如何使用pandas将同列其他行值映射为对应id的推荐结果

Pandas 实现同簇非自身ID推荐方案

前置准备

先构造与你示例一致的输入DataFrame:

import pandas as pd

df = pd.DataFrame({
    'id': [12345, 67890, 45678, 98765, 12321, 98789],
    'cluster': ['A']*6
})

实现方法

方法一:自连接过滤法(推荐,适合多簇、大数据量场景)

通过同簇自连接生成所有ID配对,再过滤掉自身匹配的行即可:

# 按cluster字段自连接,得到同簇下所有ID的两两组合
merge_df = df.merge(df, on='cluster', suffixes=('', '_rec'))
# 剔除ID和推荐ID相同的行,重命名列名
result = merge_df[merge_df['id'] != merge_df['id_rec']].rename(columns={'id_rec': 'recommendation'})
# 可选重置索引
result = result.reset_index(drop=True)

方法二:分组爆炸法(写法简洁,适合小数据集场景)

先按簇聚合所有ID列表,再逐行过滤自身ID后炸开成多行:

# 按cluster分组,给每个ID映射当前簇的所有ID列表
df['all_ids'] = df.groupby('cluster')['id'].transform(lambda x: x.tolist())
# 逐行过滤掉自身ID,得到当前ID的推荐列表
df['recommendation'] = df.apply(lambda row: [i for i in row['all_ids'] if i != row['id']], axis=1)
# 把列表炸开成多行,保留需要的字段
result = df.explode('recommendation')[['id', 'cluster', 'recommendation']].reset_index(drop=True)

两种方法输出的结果都完全符合预期,每个ID对应同簇下除自身外的所有其他ID,每条推荐单独占一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:15:05