我有一个带有二进制数据的数据框,并且我知道各列之间存在依赖性。我想删除相关列,而只想保留独立列。输入示例如下:

Test ,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
test1,0,0,0,0,0,0,0,1,1,1,1,1,0,1,1,1
test2,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1
test3,1,1,1,0,1,1,1,1,1,1,1,1,1,0,0,1
test4,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1
test5,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1


在这里,我们看到(A,B,C,G,M), (D), (E,F), (H,I,J,K,L,P) and (N, O)是具有相同值或相关列的分组列。最后,我想获得以下几列:

Test,A,D,E,H,Ntest1,0,0,0,1,1test2,1,0,1,1,0test3,1,0,1,1,0test4,1,1,0,1,0test5,1,1,0,1,0

我正在尝试在python中使用PCA,但无法实现。有人可以指导我如何实现这一目标吗?

编辑:这是我正在使用的示例代码

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA

df = pd.read_csv("TestInput.csv")
print(df)
pca = PCA()

#Remote the header and the row names
numDf = df.iloc[:,1:]
print(pca.fit(numDf))
T=pca.transform(numDf)

print("Number of unique columns are:", T.shape[1])
print(np.cumsum(pca.explained_variance_ratio_))


谢谢。

最佳答案

this comment转换为答案,并使用drop_duplicates查找和删除重复的列。

df = df.set_index('Test')
df.T.drop_duplicates(keep='first').T

       A  D  E  H  N
Test
test1  0  0  0  1  1
test2  1  0  1  1  0
test3  1  0  1  1  0
test4  1  1  0  1  0
test5  1  1  0  1  0

07-28 02:45
查看更多