使用以下 df:
|Research|Thesis|Proposal|AI|Analytics|Data|
| -------|------|-------_|--|---------|----|
| 54 | 0 |0 |0 |5 | 0 |
| 33 | 43 |5 |0 |0 | 81|
我需要为所有可能的列对创建 2*2 矩阵,
eg: (0,1), (0,2), ... (0,n)
(1,2), (1,3), (1,n)
(2,3), (2,4), (2,5), .....(2,n)
用这些列中的值填充它
对于pair(0,1),矩阵应该由第0 列和第1 列的学校1 的单词和第0 列和第1 列的学校2 的单词组成
例如:对于 [Research,Thesis] 或 (0,1) 对,矩阵将是
0 | 1 |
---|---|
54 | 0 |
33 | 43 |
对于 [Research,Thesis] 或 (0,2) 对,矩阵将是
0 | 1 |
---|---|
54 | 0 |
33 | 5 |
并确保每一行和每一列的总和为一个 > 零的值(如果没有,则不包括它们)即对于 2*2 矩阵 m,我们可以检查第一行: if (m[0,0] + m[0,1]) > 0. 需要对第二行以及第一和第二列这样做
我使用了 2 个 for 循环来获取所有可能的对,但我无法创建矩阵并检查所有组合的每一行和列的总和是否大于 0。
data=[[54, 0, 0, 6, 5, 0,],[33, 43, 5, 0, 76, 81]]
df=pd.DataFrame(data,columns = ['Research', 'Thesis', 'Proposal',
'AI', 'Analytics', 'Data'])
#The 2 loops below create all possible pairs
for i in range(0,len(df.columns)):
for j in range(i+1,len(df.columns)):
matrix = np.zeros((2,2))
任何帮助将不胜感激!
编辑 输出应该只是矩阵的集合
答案 0 :(得分:0)
IIUC,将 itertools.combinations
与运算符结合使用的一种方式:
from itertools import combinations
matrices = [d for c1, c2 in combinations(df.columns, 2)
if (d:=df[[c1, c2]]).sum(1).gt(0).all()]
输出:
# len(matrices)
[ Research Thesis
0 54 0
1 33 43,
Research Proposal
0 54 0
1 33 5,
Research AI
0 54 6
1 33 0,
Research Analytics
0 54 5
1 33 76,
Research Data
0 54 0
1 33 81,
Thesis AI
0 0 6
1 43 0,
Thesis Analytics
0 0 5
1 43 76,
Proposal AI
0 0 6
1 5 0,
Proposal Analytics
0 0 5
1 5 76,
AI Analytics
0 6 5
1 0 76,
AI Data
0 6 0
1 0 81,
Analytics Data
0 5 0
1 76 81]