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
背景:我必须检查条目是否与两个系统匹配,但不幸的是,系统使用了不同的命名,我需要识别前导列。使用两个列的产品,在元组列表理解中使用countTrue
ssum
测试成员身份,并传递给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