我在熊猫中有一个共现矩阵。如何获得所有组合的共生值,按降序排序而不循环? (我没有在对角线的另一边写入值,但它们在那里,并保持镜像值)
输入:
A B C D E F
A 0 1 0 1 2 0
B 0 3 1 1 1
C 0 1 8 9
D 0 2 6
E 0 9
F 0
输出:
CF 9
EF 9
CE 8
DF 6
BC 3
AE 2
DE 2
AB 1
AD 1
BD 1
BE 1
BF 1
CD 1
AC 0
AF 0
答案 0 :(得分:4)
i, j = np.triu_indices(len(df), 1)
pd.Series(
df.values[i, j], df.index[i] + df.index[j]
).sort_values(ascending=False)
EF 9
CF 9
CE 8
DF 6
BC 3
DE 2
AE 2
CD 1
BF 1
BE 1
BD 1
AD 1
AB 1
AF 0
AC 0
dtype: object
设置
txt = """\
A B C D E F
A 0 1 0 1 2 0
B 0 3 1 1 1
C 0 1 8 9
D 0 2 6
E 0 9
F 0"""
df = pd.read_fwf(pd.io.common.StringIO(txt), index_col=0).fillna('')
df
A B C D E F
A 0 1 0 1 2 0
B 0 3 1 1 1
C 0 1 8 9
D 0 2 6
E 0 9
F 0
答案 1 :(得分:0)
您可以使用combinations
中的itertools
循环显示行和列,然后添加到列表中。
from itertools import combinations
explode_list = []
_ = [explode_list.append([r + c, df.loc[r][c]]) for r, c in combinations(df.columns, 2)]
<强>输出强>
[['AB', 1],
['AC', 0],
...
]