Древняя тема, если кто-то все еще спотыкается об этом - другое обходное решение - преобразовать через .astype (str) в строку перед группировкой. Это сохранит NaN.
in:
df = pd.DataFrame({'a': ['1', '2', '3'], 'b': ['4', np.NaN, '6']})
df.astype(str).groupby(['b']).sum()
out:
a
b
4 1
6 3
nan 2