I have two pandas data frames, a and b:
a1 a2 a3 a4 a5 a6 a7
1 3 4 5 3 4 5
0 2 0
Use a tuple of the column values as the hashable key in a dictionary
d = {(*t,): c for c, t in df2.items()}
{c: d[(*t,)] for c, t in df1.items()}
{'a1': 'b5',
'a2': 'b7',
'a3': 'b6',
'a4': 'b4',
'a5': 'b1',
'a6': 'b3',
'a7': 'b2'}
Just in case we don't have perfect representation, I've only produced the dictionary for columns where there is a match.
d2 = {(*t,): c for c, t in df2.items()}
d1 = {(*t,): c for c, t in df1.items()}
{d1[c]: d2[c] for c in {*d1} & {*d2}}
{'a5': 'b1',
'a2': 'b7',
'a7': 'b2',
'a6': 'b3',
'a3': 'b6',
'a1': 'b5',
'a4': 'b4'}
idxmaxThis borders on the absurd... Don't actually do this.
{c: df2.T.eq(df1[c]).sum(1).idxmax() for c in df1}
{'a1': 'b5',
'a2': 'b7',
'a3': 'b6',
'a4': 'b4',
'a5': 'b1',
'a6': 'b3',
'a7': 'b2'}