首页 > 解决方案 > 查找具有最大匹配条目/值数量的两个数据框的列

问题描述

我有两个数据框:

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

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

标签: pythonpandasdataframe

解决方案


使用product这两个columns名称,在元组的列表理解中Series.isin使用 count Trues测试成员资格并传递给构造函数:sumDataFrame

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

推荐阅读