如何将多维对称DataFrame转换为无重复的双列DataFrame?
将对称DataFrame转换为无重复项的双列(或三列)DataFrame
你的原始数据是一个对称的相关矩阵,对角线为0,且存在大量重复的对称项。要得到无重复的结果,可按以下步骤实现:
步骤说明
- 将原DataFrame的第一列设为索引,让行列都以特征名称(E1-E4)标识;
- 堆叠DataFrame,将列维度转换为行维度,得到包含所有特征对的多级索引Series;
- 筛选掉对角线项(特征与自身配对),同时只保留特征名称字典序靠前的配对(如保留E1-E3,排除E3-E1),彻底去除重复项;
- 转换为结构化的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
相关产品推荐
相关产品推荐

