2025-03-24 09:57:14 +08:00

36 lines
1.3 KiB
Python

import pandas as pd
def sort_matrix_by_diag (rotated_components_df):
# 调整因子列顺序:按方差解释降序排列
variance_explained = (rotated_components_df ** 2).sum()
column_order = variance_explained.sort_values(ascending=False).index.tolist()
rotated_components_df = rotated_components_df[column_order]
# 对载荷矩阵进行排序
sorted_loadings = rotated_components_df.copy()
# 确定每个变量的主因子(绝对值最大的列)
sorted_loadings['主因子'] = sorted_loadings.abs().idxmax(axis=1)
# 将主因子转换为按列顺序的分类变量,确保排序正确
sorted_loadings['主因子'] = pd.Categorical(
sorted_loadings['主因子'],
categories=column_order,
ordered=True
)
# 提取每个变量在其主因子上的载荷绝对值
sorted_loadings['绝对值'] = sorted_loadings.apply(
lambda row: abs(row[row['主因子']]),
axis=1
)
# 按主因子顺序和绝对值降序排序
sorted_loadings = sorted_loadings.sort_values(
by=['主因子', '绝对值'],
ascending=[True, False]
)
# 删除临时列并输出结果
sorted_loadings = sorted_loadings.drop(['主因子', '绝对值'], axis=1)
return sorted_loadings