首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何循环遍历相关排序列表?

如何循环遍历相关排序列表?
EN

Stack Overflow用户
提问于 2020-07-02 13:37:24
回答 3查看 63关注 0票数 1

下面是找到相关矩阵并对其进行排序的简单代码,但是如何通过循环获取列对名称?

代码语言:javascript
复制
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?

结果:

代码语言:javascript
复制
   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

我希望是这样的:

代码语言:javascript
复制
for (column1, column2, s) in sol:
    print(column1 + ',' + column2 + ',' + str(s))

结果:

代码语言:javascript
复制
x1, x3, 1.000000
x3, x4, 0.969248
x1, x4, 0.969248
x2, x4, 0.472866
x1, x2, 0.399298
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-02 13:45:05

您可以使用DataFrame.itertuples将数据帧行作为命名对进行迭代:

代码语言:javascript
复制
pairs = sol.reset_index().itertuples(index=False, name=None)
print('\n'.join(str(p).strip('()') for p in pairs))

或者也可以使用Series.iteritems

代码语言:javascript
复制
for item in sol.iteritems():
    print(str(item).replace('(', '').replace(')', ''))

结果:

代码语言:javascript
复制
'x1', 'x3', 1.0
'x3', 'x4', 0.9692476431690819
'x1', 'x4', 0.9692476431690819
'x2', 'x4', 0.4728662437434603
'x2', 'x3', 0.39929785312496247
'x1', 'x2', 0.39929785312496247
票数 2
EN

Stack Overflow用户

发布于 2020-07-02 13:46:54

这就是你要找的吗:

代码语言:javascript
复制
print(sol.reset_index())

  level_0 level_1         0
0      x1      x3  1.000000
1      x3      x4  0.969248
2      x1      x4  0.969248
3      x2      x4  0.472866
4      x2      x3  0.399298
5      x1      x2  0.399298
票数 1
EN

Stack Overflow用户

发布于 2020-07-02 13:57:23

你很接近,你可以用unpack MultiIndex values by (column1, column2)Series.items循环

代码语言:javascript
复制
for ((column1, column2), s) in sol.items():
    print(column1 + ',' + column2 + ',' + str(s))
    
x1,x3,1.0
x3,x4,0.9692476431690819
x1,x4,0.9692476431690819
x2,x4,0.4728662437434603
x2,x3,0.39929785312496247
x1,x2,0.39929785312496247

f-string类似的解决方案:

代码语言:javascript
复制
for ((column1, column2), s) in sol.items():
    print( f"{column1},{column2},{s}")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62689680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档