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

Python 查找具有最大匹配项/值数的两个数据帧的列,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧: dfA Alpha Beta Gamma 1 apple bana 1 gin vodka 如何找到具有最大匹配实体数的列对?对于两列,合并或使用集合非常容易,是否需要为其编写For循环 我还尝试了:dfA.where(dfA.values==dfB.values).notna(),这会导致ValueError:数组条件必须与self的形状相同 我期望的结果是: Columns Nr (Alpha, Teta) 2 (Alpha, he

我有两个数据帧:

dfA
Alpha Beta Gamma
1     apple bana
1     gin   vodka
如何找到具有最大匹配实体数的列对?对于两列,合并或使用集合非常容易,是否需要为其编写For循环

我还尝试了:
dfA.where(dfA.values==dfB.values).notna()
,这会导致
ValueError:数组条件必须与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

背景:我必须检查条目是否与两个系统匹配,但不幸的是,系统使用了不同的命名,我需要识别前导列。

使用两个
列的
产品
,在元组列表理解中使用count
True
s
sum
测试成员身份,并传递给
DataFrame
构造函数:

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
输出中3列的解决方案非常相似:

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

df = pd.DataFrame(L, columns=['col1','col2','Nr'])
print (df)
    col1  col2  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

对于较大的数据帧,我是否可以为特定列指定
dfA.columns
?否则它会运行一点…@PV8-是的,当然。相反,
dfA.columns
在产品(['Alpha','Beta',dfB.columns])中为a,b使用类似于
L=[((a,b),dfA[a].isin(dfB[b]).sum()的列表(['Alpha','Beta',dfB.columns])
如果必要,为
dfB.columns使用类似的列表,如果运行此命令,我会得到警告:未来警告:元素比较失败;返回标量,但是将来会执行元素比较,你认为这是个问题吗?@PV8-我认为一些数据相关的问题。
L = [(a, b, dfA[a].isin(dfB[b]).sum()) for a, b in product(dfA.columns, dfB.columns)]

df = pd.DataFrame(L, columns=['col1','col2','Nr'])
print (df)
    col1  col2  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