如何将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
相关产品推荐
相关产品推荐

