Python:按值获取列

2024-09-24 06:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

出于聚类算法的目的,我需要逐行迭代word/document矩阵,并为每一行获取所有列的子矩阵,其中该行的值为1(甚至更好,排除迭代的行)。 假设我有一个df:

df = pd.DataFrame({'A': '0 1 0 1 0 1 0 1'.split(),
                 'B': '1 1 0 1 0 0 1 0'.split(),
                 'C': '0 0 0 1 0 0 1 0 '.split(),
                 'D': '0 0 1 0 0 0 0 0'.split()})

   w1 w2 w3 w4
0  0  1  0  0
1  1  1  0  0
2  0  0  0  1
3  1  1  1  0

我需要返回第一行的代码

   w2
1  1
2  0
3  1

第二次

   w1 w2
0  1  0
2  0  0
3  1  1

等等。 我该怎么做?我不能用.iloc来绕着它转


Tags: 代码目的算法dataframedf矩阵聚类document
1条回答
网友
1楼 · 发布于 2024-09-24 06:32:37

IIUC,我把所有的步骤都打印出来,以防你需要它们来理解这个过程

l=np.where(df.eq(1), df.columns, 'nan')
df_list=[]

for y,x in enumerate(l) :
    print(x)
    print(y)
    print(x[x!='nan'])
    print(df.drop(y)[x[x!='nan']])
    df_list.append(df.drop(y)[x[x!='nan']]) #you can store those df in a list 


['nan' 'w2' 'nan' 'nan']
0
['w2']
   w2
1   1
2   0
3   1
['w1' 'w2' 'nan' 'nan']
1
['w1' 'w2']
   w1  w2
0   0   1
2   0   0
3   1   1
['nan' 'nan' 'nan' 'w4']
2
['w4']
   w4
0   0
1   0
3   0
['w1' 'w2' 'w3' 'nan']
3
['w1' 'w2' 'w3']
   w1  w2  w3
0   0   1   0
1   1   1   0
2   0   0   0

相关问题 更多 >