查找具有最大匹配项/值数量的两个数据框的列

时间:2019-09-30 11:08:15

标签: python pandas dataframe

我有两个数据框:

dfA
Alpha Beta Gamma
1     apple bana
1     gin   vodka
dfB
Teta heta  hofa
1    apple bana
1    apple vodka

如何找到具有最大匹配实体数的列对?对于两列,进行合并或使用集非常容易,我是否需要为此编写一个for循环?

我还尝试了:dfA.where(dfA.values==dfB.values).notna()导致ValueError: Array conditional must be same shape as self

我想要的结果是:

Columns         Nr
(Alpha, Teta)   2
(Alpha, heta)   0
(Alpha, hofa)   0
(Beta, Teta)    0
(Beta, heta)    1
(Beta, hofa)    0
(Gamma, Teta)   0
(Gamma, heta)   0
(Gamma, hofa)   2

背景:我必须检查两个系统的条目是否匹配,但是不幸的是,这些系统使用的是不同的命名,并且我需要标识前几列。

1 个答案:

答案 0 :(得分:2)

在两个元组的列表理解中使用两个product名称中的columns,按Series.isin测试成员资格,按True计数sum个,对元组进行列表理解,然后传递给{{ 1}}构造函数:

DataFrame

对于输出中的3列非常相似的解决方案:

from  itertools import product

L = [((a, b), dfA[a].isin(dfB[b]).sum()) for a, b in product(dfA.columns, dfB.columns)]

df = pd.DataFrame(L, columns=['Columns','Nr'])
print (df)
         Columns  Nr
0  (Alpha, Teta)   2
1  (Alpha, heta)   0
2  (Alpha, hofa)   0
3   (Beta, Teta)   0
4   (Beta, heta)   1
5   (Beta, hofa)   0
6  (Gamma, Teta)   0
7  (Gamma, heta)   0
8  (Gamma, hofa)   2