我有一个数据集,我按项目(例如“小部件”)进行分组,然后运行关联。结果为每个小部件提供了一个矩阵,但由于我有大量小部件,因此很难读取任何导出的 CSV。
有没有一种简单的方法可以将矩阵转换为代表“列与列”值的列?一些进入相关性的列绝对不相关,这一事实进一步令人困惑。
我尝试了 Pandas Correlation Groupby 的答案但它将列保留为附加索引(至少我认为这是正确的术语,因为我是 pandas 的新手)。
相关性示例(带有虚构数字):
+--------------------------------------+
| 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 |
| ... |
+-------------------------------------------+
最佳答案
尚不清楚哪些列相关。但是,您可以按如下方式展平相关矩阵:
# 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
关于python - 将 Pandas 相关性转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34077992/