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

在R中重塑数据用于网络分析:如何生成伙伴关系表?

解决方案:将宽格式合作表转换为关系对表

针对你需要将同一项目下的合作伙伴生成两两关系对的需求,以下提供几种常用工具的实现方法:

1. Python Pandas 代码实现

适合处理大规模数据,步骤清晰可复用:

import pandas as pd
from itertools import combinations

# 加载原始数据(实际使用时可替换为pd.read_csv/pd.read_excel)
raw_data = pd.DataFrame({
    'project ID': [1, 2, 3],
    'partner 1 ID': ['P01', 'P02', 'P01'],
    'partner 2 ID': ['P02', 'P04', 'P03'],
    'partner 3 ID': ['P03', None, 'P04']
})

# 将宽表转换为长表,过滤空值合作伙伴
long_format = raw_data.melt(
    id_vars='project ID',
    value_name='partner'
).drop(columns='variable').dropna()

# 按项目分组,生成所有不重复的两两合作伙伴关系对
result = long_format.groupby('project ID')['partner'].apply(
    lambda partners: pd.DataFrame(
        list(combinations(partners, 2)),
        columns=['Relation partner to', 'Relation partner from']
    )
).reset_index().drop(columns='level_1')

# 输出结果
print(result)

这段代码会直接生成你需要的关系表结构,combinations函数确保只生成单向不重复的关系对,和示例输出完全匹配。

2. Excel Power Query 操作步骤

适合非代码用户,可视化操作:

  • 第一步:将原始数据转换为长表
    复制原始表的project ID列和所有partner列,整理成两列:project ID和partner,删除空行。
  • 第二步:用Power Query生成关系对
    1. 选中整理后的长表,点击「数据」选项卡 → 「从表格/区域」进入Power Query编辑器
    2. 点击「转换」选项卡 → 「分组依据」,分组列选project ID,操作选「所有行」,新列名设为AllRows
    3. 添加自定义列,公式输入:List.Combinations([AllRows][partner], 2)
    4. 点击自定义列右侧的展开按钮,展开所有组合;再展开每个组合的两个元素,分别重命名为Relation partner to和Relation partner from
    5. 删除多余列,点击「关闭并上载」,即可得到目标关系表

3. SQL 实现(适用于数据库存储的数据)

如果数据存储在数据库中,可通过以下SQL语句生成结果:

WITH long_partners AS (
    -- 将宽表转换为长表,过滤空值
    SELECT project_id, partner1 AS partner FROM project_partners WHERE partner1 IS NOT NULL
    UNION ALL
    SELECT project_id, partner2 AS partner FROM project_partners WHERE partner2 IS NOT NULL
    UNION ALL
    SELECT project_id, partner3 AS partner FROM project_partners WHERE partner3 IS NOT NULL
)
-- 自连接生成不重复的关系对
SELECT 
    l1.project_id AS "project ID",
    l1.partner AS "Relation partner to",
    l2.partner AS "Relation partner from"
FROM long_partners l1
INNER JOIN long_partners l2 
    ON l1.project_id = l2.project_id 
    AND l1.partner < l2.partner  -- 避免生成反向重复的关系对
ORDER BY l1.project_id, l1.partner, l2.partner;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:25:30