我有一个数据集,我按项目分组(例如"小部件"),然后运行相关性。结果为每个小部件提供了一个矩阵,但由于我有大量的小部件,因此很难读取任何导出的CSV。
有没有一种简单的方法可以将矩阵转换为代表"列vs列#34的列;值?由于进入相关性的一些列肯定不相关,因此进一步混淆了这一点。
我尝试了Pandas Correlation Groupby的答案,但它将列作为附加索引(至少我认为这是正确的术语,因为我是熊猫新手)。
示例相关性(带有编号):
+--------------------------------------+
| 1 Name Color Material MTTF |
+--------------------------------------+
| Name 1 0.2 0.4 0.01 |
| Color 0.2 1 0.03 0.08 |
| Material 0.4 0.3 1 0.75 |
| MTTF 0.01 0.08 0.75 1 |
+--------------------------------------+
| 2 Name Color Material MTTF |
+--------------------------------------+
| ... Name Color Material MTTF |
+--------------------------------------+
我想要的CSV输出将如下所示(注意我删除了相关性没有意义的列):
+-------------------------------------------+
| Material vs Color Material vs MTTF |
+-------------------------------------------+
| 1 0.03 0.75 |
| 2 0.15 0.80 |
| ... |
+-------------------------------------------+
答案 0 :(得分:2)
目前尚不清楚哪些列是相关的。但是,您可以按如下方式展平相关矩阵:
# Generate random data.
df = pd.DataFrame(np.random.randn(10, 3), columns=list('ABC'))
# Create correlation matrix
corr_matrix = df.corr()
>>> corr_matrix
A B C
A 1.000000 0.052204 -0.442129
B 0.052204 1.000000 0.187938
C -0.442129 0.187938 1.000000
# Flatten correlation matrix.
flat_cm = corr_matrix.stack().reset_index()
flat_cm['A_vs_B'] = flat_cm.level_0 + '_' + flat_cm.level_1
flat_cm.columns = ['A', 'B', 'correlation', 'A_vs_B']
flat_cm = flat_cm.loc[flat_cm.correlation < 1, ['A_vs_B', 'correlation']]
>>> flat_cm
A_vs_B correlation
1 A_B -0.202226
2 A_C -0.103136
3 B_A -0.202226
5 B_C 0.198216
6 C_A -0.103136
7 C_B 0.198216