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

如何将DataFrame转换为以元组为键且排除i=j项的字典

问题

如何将如下的DataFrame转换为以元组为键的字典?要求排除所有行索引i等于列索引j的项。

示例DataFrame:

import pandas as pd

df = pd.DataFrame({
    0: [0, 5223, 901],
    1: [4733, 0, 5635],
    2: [456, 5680, 0]
})

期望输出字典(仅保留i != j的项):

{(0, 1): 4733,
 (0, 2): 456,
 (1, 0): 5223,
 (1, 2): 5680,
 (2, 0): 901,
 (2, 1): 5635
}

方法1:Pandas原生堆叠+过滤(最简洁)

利用stack()快速生成复合索引,再过滤掉索引相等的项:

# 堆叠DataFrame得到以(行索引, 列索引)为键的Series
stacked_series = df.stack()
# 过滤i≠j的项并转字典
result = stacked_series[stacked_series.index.get_level_values(0) != stacked_series.index.get_level_values(1)].to_dict()

方法2:手动嵌套遍历(直观易懂)

直接遍历所有行和列,判断后存入字典:

result = {}
for row_idx in df.index:
    for col_idx in df.columns:
        if row_idx != col_idx:
            result[(row_idx, col_idx)] = df.loc[row_idx, col_idx]

方法3:Melt转换长格式+过滤

通过melt把宽表转成窄表,再构造复合索引字典:

# 转长格式,保留行索引和列索引信息
melted_df = df.reset_index().melt(id_vars='index', var_name='col_idx', value_name='val')
# 过滤后转字典
result = melted_df[melted_df['index'] != melted_df['col_idx']].set_index(['index', 'col_idx'])['val'].to_dict()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:45:32