gpt4 book ai didi

python - 来自 Pandas 数据框的共现矩阵

转载 作者:行者123 更新时间:2023-12-05 03:50:10 25 4
gpt4 key购买 nike

问题

我有一个 pandas 数据框,我需要计算数据框中的每个唯一条目出现在每个其他条目的同一行中有多少行。


<子>

相关但不同的帖子


可重现的设置

import pandas as pd
import numpy as np

数据框:

df = pd.DataFrame({'a': ['A', 'A', 'B', 'B'],
'b': ['B', 'C', 'B', 'B'],
'c': ['C', 'A', 'C', 'A'],
'd': ['B', 'D', 'B', 'A']},
index=[0, 1, 2, 3])

即:

+----+-----+-----+-----+-----+
| | a | b | c | d |
|----+-----+-----+-----+-----|
| 0 | A | B | C | B |
| 1 | A | C | A | D |
| 2 | B | B | C | B |
| 3 | B | B | A | A |
+----+-----+-----+-----+-----+

(使用 this 打印。)


我尝试过的

我尝试使用 code from answer , & 替换这些变量:

document = [list(each) for each in df.values]
names = list(np.unique(df.values))

它给出了错误的结果:

  A B C D
A 4 6 3 2
B 6 10 5 0
C 3 5 0 1
D 2 0 1 0

它基于迭代,所以我希望有更好的解决方案。


预期输出

+----+-----+-----+-----+-----+
| | A | B | C | D |
|----+-----+-----+-----+-----|
| A | nan | 2 | 2 | 1 |
| B | 2 | nan | 2 | 0 |
| C | 2 | 2 | nan | 1 |
| D | 1 | 0 | 1 | nan |
+----+-----+-----+-----+-----+

2 行,其中 AB 都出现了,所以单元格行 A 中的值B 列是 22AC 都出现了,所以单元格行 A 列中的值 C2


问题

我怎样才能在 Pandas 中轻松获得这个按行共生矩阵?如果我不必循环遍历这些值就太好了。


(pandas.Categorical 可能有点用,我还没有成功。)

最佳答案

我们可以做stack然后get_dummiesdot然后value

s=df.stack().str.get_dummies().sum(level=0).ne(0).astype(int)
s=s.T.dot(s).astype(float)
np.fill_diagonal(s.values, np.nan)
s
Out[33]:
A B C D
A NaN 2.0 2.0 1.0
B 2.0 NaN 2.0 0.0
C 2.0 2.0 NaN 1.0
D 1.0 0.0 1.0 NaN

关于python - 来自 Pandas 数据框的共现矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63598670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com