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

2024-06-16 13:00:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧:

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

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


Tags: 数据alphaapple系统betaginvaluesdfa
1条回答
网友
1楼 · 发布于 2024-06-16 13:00:40

在元组的列表理解中,使用两个columns名称的product,通过^{}测试成员身份,通过sum计数True,并传递给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

相关问题 更多 >