В посте о столбцах groupby с NaN (пропущенными) значениями есть предложение: Группы NA в GroupBy автоматически исключаются .
Видимо, в случае группировки по нескольким столбцам, то же самое происходит, если любой уровень ключа группировки содержит NaN .
Чтобы подтвердить это, запустите:
for key, grp in groupeddf:
print(f'\nGroup: {key}\n{grp}')
, и результат будет:
Group: ('Falcon', 'Captive')
Animal Type Max Speed
0 Falcon Captive 390
Group: ('Parrot', 'Captive')
Animal Type Max Speed
2 Parrot Captive 30
Group: ('Parrot', 'Wild')
Animal Type Max Speed
3 Parrot Wild 20
Но если вы выполните groupeddf.groups (для печати содержимого), вы получите:
{('Falcon', 'Captive'): Int64Index([0], dtype='int64'),
('Falcon', nan): Int64Index([1], dtype='int64'),
('Parrot', 'Captive'): Int64Index([2], dtype='int64'),
('Parrot', 'Wild'): Int64Index([3], dtype='int64')}
Итак, у нас есть группа ('Falcon', nan) , содержащая строку с индексом 1 .
Если вы хотите обработать все групп, без каких-либо уловок для изменения NaN на что-то другое, запустите что-то вроде:
for key in groupeddf.groups:
print(f'\nGroup: {key}\n{df.loc[groupeddf.groups[key]]}')
На этот раз распечатка будет содержать также ранее отсутствующую группу.