python - 将 Pandas 相关性转换为列

标签 python pandas

我有一个数据集,我按项目(例如“小部件”)进行分组,然后运行关联。结果为每个小部件提供了一个矩阵,但由于我有大量小部件,因此很难读取任何导出的 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/

相关文章:

python - 多线程 cstringio 在 ubuntu 14.04 上慢 17%

python - 使用 API 在 Redash 上创建新查询

python - 满足条件时停止应用

python - 是否有一个 Pandas 函数可以将例如前三行连接在一起(就像我有一个长度为三的窗口)

javascript - Highcharts 不渲染

python - ipython 不允许创建类方法

python - 在 python 中保存文件时添加 BOM(unicode 签名)

python - 在 pandas 数据框中使用不同类型的列进行排名,每列都有升序和降序替代方案

python - 如何使用颜色图为 Pandas DataFrames 的绘图着色

python - 清理 Pandas 数据框以仅返回字符串