Почему метод head() отображает больше, чем 5 записей по умолчанию после группировки?

#python #pandas

#python #pandas

Вопрос:

После импорта из CSV я создал объект cars . Cars.head() возвращает следующие 5 записей, что соответствует ожиданиям

     car_names           mpg     cyl
0   Mazda RX4           21.0    6
1   Mazda RX4 Wag       21.0    6
2   Datsun 710          22.8    4
3   Hornet 4 Drive      21.4    6
4   Hornet Sportabout   18.7    8
  

Впоследствии я создал новый объект cars_group, сортирующий автомобили по цилиндрам, и снова попытался вызвать метод head() .

 cars_group = cars.groupby(['cyl'])
cars_group.head()
  

Однако на этот раз вывод показывает 15 записей:

     car_names           mpg     cyl 
0   Mazda RX4           21.0    6   
1   Mazda RX4 Wag       21.0    6   
2   Datsun 710          22.8    4   
3   Hornet 4 Drive      21.4    6   
4   Hornet Sportabout   18.7    8   
5   Valiant             18.1    6   
6   Duster 360          14.3    8   
7   Merc 240D           24.4    4   
8   Merc 230            22.8    4   
9   Merc 280            19.2    6   
11  Merc 450SE          16.4    8   
12  Merc 450SL          17.3    8   
13  Merc 450SLC         15.2    8   
17  Fiat 128            32.4    4   
18  Honda Civic         30.4    4   
  

Может кто-нибудь объяснить, почему это происходит? Похоже, что после сортировки ожидаемое количество записей (5) умножается на 3, что также, по совпадению, является количеством уникальных значений цилиндра. Я также отметил, что порядок, возвращаемый, cars_group.head() похоже, не сгруппирован по количеству цилиндров, а вместо этого сохраняет тот же порядок, что и первоначально импортированный из .csv.

Комментарии:

1. Ваш код вызывает groupby.head() , а не df.head() . Первый возвращает первые 5 строк каждой группы, поэтому общее количество строк равно #groups * 5 => 3 * 5 = 15.

2. cars_group != cars_groups это опечатка в реальном коде или ошибка копирования?

3. обновлено, хороший глаз! это была ошибка копирования. кажется, у @cs95 есть правильный ответ, но я не могу принять, поскольку это комментарий, а не формальный ответ: (

4. Не беспокойтесь, вы можете написать ответ самостоятельно, а затем самостоятельно принять его по истечении 2 дней с момента, когда был задан вопрос.

Ответ №1:

Согласно cs95:

Ваш код вызывает groupby.head() , а не df.head() . Первый возвращает первые 5 строк каждой группы, поэтому общее количество строк равно #groups * 5 => 3 * 5 = 15.