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

如何从含命题与作者列的DataFrame生成网络分析用edge-list?

同一命题下作者两两关联的Edge-List生成实现

核心思路

按命题分组,对每组内的作者生成所有不重复的两两组合,再将组合与对应命题拼接成目标格式的DataFrame。

代码实现(基础版)

import pandas as pd
from itertools import combinations

# 构造示例输入数据
input_data = {
    'Proposition': ['A', 'A', 'A', 'A', 'B', 'B'],
    'Author': [1, 2, 3, 4, 2, 4]
}
df = pd.DataFrame(input_data)

# 初始化存储边列表的容器
edge_list = []

# 按命题分组处理
for prop, author_group in df.groupby('Proposition'):
    # 获取当前命题下的所有作者
    authors = author_group['Author'].tolist()
    # 生成所有两两不重复的组合
    for pair in combinations(authors, 2):
        edge_list.append({
            'Proposition': prop,
            'Author 1 (From)': pair[0],
            'Author 2 (To)': pair[1]
        })

# 转换为目标DataFrame
result_df = pd.DataFrame(edge_list)
print(result_df)

代码实现(Pandas链式操作版)

如果习惯用更简洁的Pandas链式写法,可以用下面的代码:

import pandas as pd
from itertools import combinations

df = pd.DataFrame({
    'Proposition': ['A', 'A', 'A', 'A', 'B', 'B'],
    'Author': [1, 2, 3, 4, 2, 4]
})

result_df = (
    df.groupby('Proposition')['Author']
    .apply(lambda authors: pd.DataFrame(list(combinations(authors, 2)), 
                                       columns=['Author 1 (From)', 'Author 2 (To)']))
    .reset_index()
    .drop(columns='level_1')
    .rename(columns={'level_0': 'Proposition'})
)

结果说明

两种方法运行后都会生成你需要的Edge-List格式DataFrame,和示例输出完全一致:

PropositionAuthor 1 (From)Author 2 (To)
A12
A13
A14
A23
A24
A34
B24

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:01:02