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

如何将多维对称DataFrame转换为无重复的双列DataFrame?

将对称DataFrame转换为无重复项的双列(或三列)DataFrame

你的原始数据是一个对称的相关矩阵,对角线为0,且存在大量重复的对称项。要得到无重复的结果,可按以下步骤实现:

步骤说明

  1. 将原DataFrame的第一列设为索引,让行列都以特征名称(E1-E4)标识;
  2. 堆叠DataFrame,将列维度转换为行维度,得到包含所有特征对的多级索引Series;
  3. 筛选掉对角线项(特征与自身配对),同时只保留特征名称字典序靠前的配对(如保留E1-E3,排除E3-E1),彻底去除重复项;
  4. 转换为结构化的DataFrame并按需重命名列。

完整代码

#coding=utf-8
import pandas as pd
import numpy as np

cor = [('E1',0,0,0.8,-0.8),
       ('E2',0,0,1.0,1.0),
       ('E3',0.8,1.0,0,1.0),
       ('E4',-0.8,1.0,1.0,0)]
label = ['','E1','E2', 'E3', 'E4']
R = pd.DataFrame.from_records(cor, columns=label)

# 设置特征列为索引
R = R.set_index('')
# 堆叠行列,获取所有特征对的相关值
stacked_data = R.stack()
# 筛选:排除对角线,且只保留无重复的特征对
filtered_data = stacked_data[
    stacked_data.index.get_level_values(0) < stacked_data.index.get_level_values(1)
]
# 转换为目标格式的DataFrame
result_df = filtered_data.reset_index()
result_df.columns = ['特征1', '特征2', '相关值']

# 如果需要合并为"特征对-相关值"的双列格式,可执行以下代码:
# result_df['特征对'] = result_df['特征1'] + '-' + result_df['特征2']
# result_df = result_df[['特征对', '相关值']]

print(result_df)

运行结果

特征1 特征2  相关值
0   E1   E3   0.8
1   E1   E4  -0.8
2   E2   E3   1.0
3   E2   E4   1.0
4   E3   E4   1.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:05:23