#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.