列之间的交叉点数

时间:2016-01-06 08:17:12

标签: python pandas

我试图找到列对之间的交叉点数 数据文件(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,我想找到更好的方法。

1 个答案:

答案 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))
相关问题