Python 中表的成对行匹配

Pairwise row match of tables in Python

我正在尝试对 100 多个表进行成对比较,以找到 "ID" 共有的行。 有没有一种简单的方法可以在不经过很多循环的情况下进行这种成对比较?

预期输出是 matrix/heatmap 显示表之间的相似性,表之间的行数相同。

附上我的表格样本。它们都保存在我机器的同一个目录中。

谢谢,

你可以在这种情况下使用 numpy 我假设所有数据都是这样的数据框:

id1 = ['A','B','C','D','E','F','G','H','I']
Value1 = np.random.random((len(id1),))
data1 = pd.DataFrame({'ID':id1,'Value':Value1})
id2 = ['O','P','A','C','R','T','U','L','M','B','E']
Value2 = np.random.random((len(id2),))
data2 = pd.DataFrame({'ID':id2,'Value':Value2})

我们将从 data1 中获取值,使用 numpy.in1d,如下所示:

result1 = data1[np.in1d(data1['ID'],data2['ID'])]

或者我们将从 data2 中获取值,如下所示:

result2 = data2[np.in1d(data2['ID'],data1['ID'])]

结果:

>>> result1
  ID     Value
0  A  0.213569
1  B  0.483985
2  C  0.888146
4  E  0.812130
>>> result2
   ID     Value
2   A  0.875728
3   C  0.690587
9   B  0.793642
10  E  0.679874
>>> 

如果我理解正确,您只需要 ID 列的成对相似性,而不管 Value 列是否具有该 ID 的不同值。假设您的表表示为名为 'dfs':

的数据框列表
m = np.zeros(shape=(len(dataframes), len(dataframes)))
for i, d in enumerate(dataframes):
    for j, d_ in enumerate(dataframes):
        commons = len(set(d.ID).intersection(set(d_.ID)))
        m[i][j] = commons
df = pd.DataFrame(m).applymap(int)
print(df)