对共现矩阵进行计数和排序

时间:2018-03-13 20:09:10

标签: python pandas numpy dataframe scipy

我在熊猫中有一个共现矩阵。如何获得所有组合的共生值,按降序排序而不循环? (我没有在对角线的另一边写入值,但它们在那里,并保持镜像值)

输入:

  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

2 个答案:

答案 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],
 ...
]