• [x] I have checked that this issue has not already been reported.

  • [x] I have confirmed this bug exists on the latest version of pandas.

  • [x] (optional) I have confirmed this bug exists on the master branch of pandas.


Note: Please read this guide detailing how to provide the necessary information for us to reproduce your bug.

Code Sample, a copy-pastable example

idx1 = pd.MultiIndex.from_product([['A'], [1.0, 2.0]], names=['id1', 'id2'])
idx2 = pd.MultiIndex.from_product([['A'], [np.nan, 2.0]], names=['id1', 'id2'])


print(idx2.get_indexer(idx1))
print(idx1.get_indexer(idx2))

Problem description

This snippet returns

[0 1]
[-1  1]

Expected Output

It should return [-1, 1] for both statement.

Part of the problem is in https://github.com/pandas-dev/pandas/blob/54fa3da2e0b65b733d12de6cbecbf2d8afef4e9f/pandas/core/indexes/multi.py#L1045-L1064

The self.levels statement does not hand the nans over. But even fixing this returns

[ 0 -1]
[-1  1]

The error must be somewhere deeper, but I could not figure out where something goes wrong. Tested on 1.0.5 and 0.25.3. Does not seem to be a regression.

Output of pd.show_versions()

master