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

如何从包含多值特质列的DataFrame中生成带权重的边列表

实现方案

以下是基于Pandas的完整实现逻辑,你的初始思路方向完全正确,具体步骤和代码如下:

  • 第一步:展开特质列,将每个英雄的每个特质拆分为单独行
  • 第二步:对展开后的表做自连接,匹配出所有共享同一特质的英雄对
  • 第三步:过滤无效配对(自己和自己的配对),可选过滤双向重复配对
  • 第四步:按英雄对分组统计出现次数,就是两个英雄共享的特质数量(即边权重)

完整代码

import pandas as pd

# 构造示例数据,可替换为你的实际数据
df = pd.DataFrame({
    'Champion': ['Alphelios', 'Ashe', 'Heimerdinger', 'Lee Sin'],
    'Traits': [
        ['Nightbringer', 'Ranger'],
        ['Draconic', 'Ranger'],
        ['Renewer', 'Draconic', 'Caretaker'],
        ['Nightbringer', 'Skirmisher']
    ]
})

# 1. 展开Traits列
df_explode = df.explode('Traits', ignore_index=True)

# 2. 自连接匹配同特质的英雄对
df_merge = df_explode.merge(df_explode, on='Traits', suffixes=('_source', '_target'))

# 3. 过滤无效配对:移除自己和自己的配对,同时用大小于判断避免A-B和B-A的重复双向边
# 如果需要保留双向边,仅保留`Champion_source != Champion_target`的判断即可
df_merge = df_merge[df_merge['Champion_source'] < df_merge['Champion_target']]

# 4. 分组统计权重,得到最终边列表
edge_df = df_merge.groupby(['Champion_source', 'Champion_target'], as_index=False)['Traits'].count()
edge_df.rename(columns={'Traits': 'weight'}, inplace=True)

输出示例

最终得到的edge_df结构如下:

Champion_sourceChampion_targetweight
AlpheliosAshe1
AlpheliosLee Sin1
AsheHeimerdinger1

注:该方案在英雄量级小于1000的场景下性能足够,完全满足普通游戏数据分析需求


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:39:03