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

高效从Pandas DataFrame生成嵌套字典的方法

高效将Pandas DataFrame转换为网络图嵌套字典

原始数据结构

先确认你的DataFrame结构:

import pandas as pd

d = {'I': ['A', 'B', 'C', 'D'], 'X': [1, 0, 3, 1], 'Y': [0, 1, 2, 1], 'Z': [1, 0, 0, 0], 'W': [3, 2, 0, 0]}
df = pd.DataFrame(data=d, columns=['I','X', 'Y', 'Z', 'W'])
df.set_index('I', inplace=True, drop=True)

高效实现方案

方案一:Pandas向量化操作(stack+分组)

这是处理大数据量最优的方案,完全依赖Pandas底层优化的向量化操作,避免Python级循环:

# 转换为长格式并过滤0值
stacked_df = df.stack().reset_index(name='weight')
filtered = stacked_df[stacked_df['weight'] != 0]

# 分组构建目标嵌套字典
result = filtered.groupby('I').apply(
    lambda group: group.set_index('level_1')['weight'].apply(lambda w: {w}).to_dict()
).to_dict()

print(result)

输出结果:

{'A': {'X': {1}, 'Z': {1}, 'W': {3}}, 'B': {'Y': {1}, 'W': {2}}, 'C': {'X': {3}, 'Y': {2}}, 'D': {'X': {1}, 'Y': {1}}}

方案二:字典推导+逐行遍历(中等数据量适用)

如果数据量不算极端庞大,这种写法更简洁,效率也远高于逐单元格遍历:

result = {
    node: {neighbor: {weight} for neighbor, weight in row.items() if weight != 0}
    for node, row in df.iterrows()
}

方案对比

  • 方案一:完全基于Pandas的向量化/分组操作,底层由C实现,处理十万级以上数据时优势明显,速度比Python循环快10-100倍。
  • 方案二:用字典推导封装逐行遍历,代码简洁易读,适合中等规模数据,比逐单元格遍历效率提升显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:12:17