如何使用pandas对矩阵做对角线翻转折叠,将成对比较数据填充到左下侧
解决方法
核心逻辑是先调整每对刺激的顺序,确保所有数值对应的行索引恒大于列索引,pivot后自然落在左下三角区域:
- 对原始数据的每一行,取
stimA和stimB的较大值作为新的行索引,较小值作为新的列索引 - 用调整后的索引做pivot,最后补全所有刺激对应的行列即可
完整代码如下:
import pandas as pd # 读取数据 session1 = pd.read_csv(filepath, names=['stimA', 'stimB', 'subjectAnswer']) # 调整刺激对顺序,确保行索引 > 列索引 session1['row_idx'] = session1[['stimA', 'stimB']].max(axis=1) session1['col_idx'] = session1[['stimA', 'stimB']].min(axis=1) # 生成矩阵并补全所有刺激编号的行列 all_stim = sorted(pd.unique(session1[['stimA', 'stimB']].values.ravel())) pivoted = session1.pivot(index='row_idx', columns='col_idx', values='subjectAnswer')\ .reindex(index=all_stim, columns=all_stim) # 输出结果验证 print(pivoted)
运行后输出结果和你期望的完全一致:
col_idx 1 2 3 4 5 row_idx 1 NaN NaN NaN NaN NaN 2 6.0 NaN NaN NaN NaN 3 6.0 10.0 NaN NaN NaN 4 6.0 26.0 21.0 NaN NaN 5 6.0 13.0 15.0 26.0 NaN
内容的提问来源于stack exchange,提问作者Zpfl
相关产品推荐
相关产品推荐

