python - 如何循环相关排序列表?
问题描述
下面是查找相关矩阵并对其进行排序的简单代码,但是如何通过获取列对名称来循环它?
import pandas as pd
import numpy as np
d = {
'x1': [1, 4, 4, 5, 6],
'x2': [0, 0, 8, 2, 4],
'x3': [2, 8, 8, 10, 12],
'x4': [-1, -4, -4, -4, -5]
}
df = pd.DataFrame(data=d)
print(df)
print('---')
print(df.corr())
print('---')
corr_matrix = df.corr().abs()
sol = (corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(np.bool)).stack().sort_values(ascending=False))
print(sol)
print('---')
for s in sol:
print(s)
# how to print column 1 and 2 pair names with this "s" corr?
结果:
x1 x2 x3 x4
0 1 0 2 -1
1 4 0 8 -4
2 4 8 8 -4
3 5 2 10 -4
4 6 4 12 -5
---
x1 x2 x3 x4
x1 1.000000 0.399298 1.000000 -0.969248
x2 0.399298 1.000000 0.399298 -0.472866
x3 1.000000 0.399298 1.000000 -0.969248
x4 -0.969248 -0.472866 -0.969248 1.000000
---
x1 x3 1.000000
x3 x4 0.969248
x1 x4 0.969248
x2 x4 0.472866
x3 0.399298
x1 x2 0.399298
dtype: float64
---
1.0
0.9692476431690819
0.9692476431690819
0.4728662437434603
0.39929785312496247
0.39929785312496247
我期望的是:
for (column1, column2, s) in sol:
print(column1 + ',' + column2 + ',' + str(s))
结果:
x1, x3, 1.000000
x3, x4, 0.969248
x1, x4, 0.969248
x2, x4, 0.472866
x1, x2, 0.399298
解决方案
您可以使用DataFrame.itertuples
命名对来迭代数据框行:
pairs = sol.reset_index().itertuples(index=False, name=None)
print('\n'.join(str(p).strip('()') for p in pairs))
或者也可以使用Series.iteritems
:
for item in sol.iteritems():
print(str(item).replace('(', '').replace(')', ''))
结果:
'x1', 'x3', 1.0
'x3', 'x4', 0.9692476431690819
'x1', 'x4', 0.9692476431690819
'x2', 'x4', 0.4728662437434603
'x2', 'x3', 0.39929785312496247
'x1', 'x2', 0.39929785312496247
推荐阅读
- json - 使用 TypeScript 翻译 PrimeNG 的菜单栏组件
- google-cloud-platform - GCP 中的 BillingAccountUser 角色问题
- nginx - NGINX 是否会使用代理重写工作以允许 localhost:8005 读取 localhost 上的 cookie,反之亦然?
- vue.js - 如何配置 Vite 的开发服务器以给出 404 错误?
- c# - 仅在调试期间使用 LINQ 进行查询
- azure-devops - 为什么 Web.*env*.config 文件没有被复制到工件中?
- linux - 如何在 Cassandra 服务器上查找每个客户端的流量配置文件?
- javascript - 爸爸每日笑话 API 返回未定义
- class - symfony 5:双向类关系中的映射错误
- java - 从另一个控制器调用方法时出现空指针异常