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

如何将Python DataFrame转换为以唯一节点为键的分组字典结构

问题描述

有如下示例DataFrame:

Startendvalue
AB1
AC2
BD3
CA2

需要将其转换为如下格式的字典:

{
'A': [('B',1),('C',2)]
,'B': [('D',3)]
,'C': [('A',2)]
,'D':[]
}
解决方案

可以通过以下步骤实现需求:

  1. 收集所有节点:提取Start和end列的所有唯一值,确保字典包含所有出现过的节点(包括仅作为终点的D)。
  2. 构建对应关系:按Start列分组,将每组的end与value组合成元组,再整理为列表。
  3. 补全空节点:对没有起始记录的节点,赋值为空列表。

代码实现

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Start': ['A', 'A', 'B', 'C'],
    'end': ['B', 'C', 'D', 'A'],
    'value': [1, 2, 3, 2]
})

# 获取所有唯一节点
all_nodes = pd.concat([df['Start'], df['end']]).unique()

# 初始化结果字典并填充数据
result = {}
for node in all_nodes:
    target_rows = df[df['Start'] == node]
    result[node] = list(zip(target_rows['end'], target_rows['value']))

print(result)

运行后输出结果:

{'A': [('B', 1), ('C', 2)], 'B': [('D', 3)], 'C': [('A', 2)], 'D': []}

简洁写法

也可以用groupby结合字典推导式简化代码:

# 分组获取对应关系
grouped_data = df.groupby('Start').apply(lambda x: list(zip(x['end'], x['value']))).to_dict()
all_nodes = pd.concat([df['Start'], df['end']]).unique()

# 补全空节点
result = {node: grouped_data.get(node, []) for node in all_nodes}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:01:24