我试图找到列对之间的交叉点数
数据文件(tsb)和预期结果是这样的。
每列的行数不相同,所以我想忽略空格。
数据(TSB)
C1 C2 C3 C4
A B A A
C F B B
F C C
G H
H
结果
C1_C2 C1_C3 C1_C4 C2_C3 C2_C4 C3_C4
2 3 1 2 1 2
我这样做是通过将每个列更改为列表并执行C1_C2 = len(set(C1) & set(C2))
之类的操作,但列的大小超过100,我想找到更好的方法。
答案 0 :(得分:3)
将您的文件读入pandas数据框,您将具有等效的
df = pd.DataFrame({'C1':['A', 'C', 'F', 'G', 'H'], 'C2':['B', 'F', 'C', '', ''], 'C3':['A', 'B', 'C', 'H', ''], 'C4':['A', 'B', '', '', '']})
然后你可以定义一个函数:
def findInter(pair):
return (pair[0]+ '_' + pair[1], len(set(list(df[pair[0]])) & set(list(df[pair[1]]))))
你得到了结果:
map(findInter, itertools.combinations(df.columns, 2))