Ответ 1
Да, это определенно ошибка. См. GH22491, которая точно описывает вашу проблему, и GH22618, которая. основываясь на обсуждениях, это не похоже на предполагаемое поведение.
Быстрое погружение в источник показывает, что проблема может быть в функции _factorize_keys
в core/reshape/merge.py
. Эта функция, по-видимому, разделяет клавиши, чтобы определить, какие строки должны быть сопоставлены друг с другом.
В частности, эта часть
# NA group
lmask = llab == -1
lany = lmask.any()
rmask = rlab == -1
rany = rmask.any()
if lany or rany:
if lany:
np.putmask(llab, lmask, count)
if rany:
np.putmask(rlab, rmask, count)
count += 1
... кажется виновником. Ключи NaN идентифицируются как допустимая категория (с категориальным значением, равным count
).
Отказ от ответственности: я не разработчик панда, и это только мое предположение; таким образом, реальная проблема могла быть чем-то другим. Но на первый взгляд кажется, что это так.