Рубрики
Без рубрики

Список списков списков списков – простое иллюстрированное руководство

https://youtu.be/naitymuwpcs В этом руководстве в этом руководстве показано, как группировать внутренние списки списка списков Python с помощью общего элемента. Существует три основных метода: группируйте внутренние списки вместе по общему элементу. Группируйте внутренние списки вместе с помощью общего элемента и агрегации их (например, усреднение). Групп внутренних списков вместе с общим элементом и агрегатом их … Python Список списков группы – простое иллюстрированное руководство Подробнее »

Автор оригинала: Chris.

В этом руководстве показано, как группировать внутренние списки списка списков Python по общему элементу. Есть три основных метода:

  1. Группируйте внутренние списки вместе общим элементом.
  2. Группируйте внутренние списки вместе общим элементом и агрегирующим их (например, усреднение).
  3. Групность внутренних списков вместе общим элементом и агрегациями их (например, усреднение) с использованием Пандас Внешняя библиотека.

Прежде чем мы подробно рассмотрим эти три варианта, давайте сначала предоставьте вам быстрое решение, используя библиотеку Pandas в нашей интерактивной оболочке:

Вы можете запустить этот код в вашем браузере. Если вы хотите узнать о альтернативах Pythonic или вам нужно еще несколько объяснений, затем читайте!

Метод 1: Список групп списков общей элементом в словаре

Проблема : Учитывая Список списков Отказ Группируйте элементы общего элемента и храните результат в Словарь (ключевой элемент).

Пример : Скажем, у вас есть база данных с несколькими строками (список списков), где каждая строка состоит из трех атрибутов: имя, возраст и доход. Вы хотите группировать по имени и сохранить результат в словаре. Клавиши словаря даны атрибутом имени. Значения словаря представляют собой список строк, которые имеют этот идентичный атрибут имени.

Решение Вот данные и как вы можете группировать по общему атрибуту (например, имя).

# Database:
# row = [Name, Age, Income]
rows = [['Alice', 19, 45000],
        ['Bob', 18, 22000],
        ['Ann', 26, 88000],
        ['Alice', 33, 118000]]


# Create a dictionary grouped by Name
d = {}
for row in rows:

    # Add name to dict if not exists
    if row[0] not in d:
        d[row[0]] = []

    # Add all non-Name attributes as a new list
    d[row[0]].append(row[1:])

print(d)
# {'Alice': [[19, 45000], [33, 118000]],
#  'Bob': [[18, 22000]],
#  'Ann': [[26, 88000]]}

Вы можете увидеть, что результатом является словарь с одним ключом на имя ( alice ' , «Боб» и «Энн» ). Алиса появляется в двух рядах оригинальной базы данных (список списков). Таким образом, вы связываете два ряда на свое имя, поддерживая только атрибуты возраста и дохода в ряд.

Стратегия, как вы достигли это просто:

  • Создайте пустой словарь.
  • Перейдите через каждую строку в списке списков. Первое значение списка строки – атрибут имени.
  • Добавьте атрибут имени ряд [0] В словаре, если оно не существует, но инициализация словаря в пустой список. Теперь вы можете быть уверены, что ключ существует в словаре.
  • Добавить Сублистки Slic е [Возраст, Доход] На словарное значение, так что это становится список списков, как и один список на строку базы данных.
  • Теперь вы сгруппировали все записи базы данных общего атрибута).

Все идет нормально. Но что, если вы хотите выполнить некоторую агрегацию на сгруппированных строках базы данных?

Способ 2: Групповой список списков общей элементами и совокупными сгруппированными элементами

Проблема : В предыдущем примере вы видели, что каждое словарное значение – это список списков, поскольку вы храните каждую строку как отдельный список. Но что, если вы хотите объединить все сгруппированные строки?

Пример : Словарь ввод для ключа «Алиса» может быть [[19, 45000], [33, 118000]] Но вы хотите средний Возраст и значения дохода: [(19+33)/2, (45000+118000)/2] . Как ты это делаешь?

Решение : Решение просто добавить один шаг после обработки после вышеуказанного кода для заполнения всех атрибутов с использованием ZIP () Функция следующее. Обратите внимание, что это тот же тот же код, что и ранее (без агрегации) с помощью трех строк, добавленных в конце, чтобы собрать список списков для каждого сгруппированного имени в один в среднем ценить.

# Database:
# row = [Name, Age, Income]
rows = [['Alice', 19, 45000],
        ['Bob', 18, 22000],
        ['Ann', 26, 88000],
        ['Alice', 33, 118000]]


# Create a dictionary grouped by Name
d = {}
for row in rows:

    # Add name to dict if not exists
    if row[0] not in d:
        d[row[0]] = []

    # Add all non-Name attributes as a new list
    d[row[0]].append(row[1:])

print(d)
# {'Alice': [[19, 45000], [33, 118000]],
#  'Bob': [[18, 22000]],
#  'Ann': [[26, 88000]]}

# AGGREGATION FUNCTION:
for key in d:
    d[key] = [sum(x) / len(x) for x in zip(*d[key])]

print(d)
# {'Alice': [26.0, 81500.0], 'Bob': [18.0, 22000.0], 'Ann': [26.0, 88000.0]}

В коде вы используете функцию агрегации сумма (x)/len (x) Для расчета среднего значения для каждого атрибута групповых строк. Но вы можете заменить эту часть со своей собственной функцией агрегации, такой как средний , дисперсия , длина , Минимальный , Максимум , так далее.

Объяснение :

  • Вы переходите на каждый ключ в Словарь (атрибут имени) и совокупность списка списков в плоский список усредненных атрибутов.
  • Вы нажимаете атрибуты вместе. Например, ZIP (* D ['ALICE']) становится [[19, 33], [45000, 118000]] (концептуально).
  • Вы повторяете каждый список х Из этого списка списков в Понимание списка утверждение.
  • Вы заполните групповые атрибуты с использованием собственной пользовательской функции (E.g. Sum (X)/Len (X) в среднем значения атрибута).

Посмотрите, что произойдет в этом фрагменте кода в этом интерактивном инструменте визуализации памяти (нажав кнопку «Далее»):

Метод 3: Pandas Groupby

Библиотека Pandas имеет собственную мощную реализацию Функция groupby () Отказ Посмотрите на код первым:

# Database:
# row = [Name, Age, Income]
rows = [['Alice', 19, 45000],
        ['Bob', 18, 22000],
        ['Ann', 26, 88000],
        ['Alice', 33, 118000]]


import pandas as pd
df = pd.DataFrame(rows)

print(df)
'''
       0   1       2
0  Alice  19   45000
1    Bob  18   22000
2    Ann  26   88000
3  Alice  33  118000
'''

print(df.groupby([0]).mean())
'''
        1      2
0               
Alice  26  81500
Ann    26  88000
Bob    18  22000
'''

Объяснение :

  • Импортируйте библиотеку Pandas. Найдите свои быстрые переподготовки читов здесь.
  • Создайте объект DataFrame из строк – подумайте об этом как электронную таблицу Excel в вашем коде (с нумерованными строками и столбцами).
  • Позвоните в Groupby () Функция на вашем dataframe. Используйте индекс колонки [0] (который является атрибутом имени) для группировки ваших данных. Это создает Dataframegroupby объект.
  • На Dataframegroupby Объект называют Среднее () функция или любая другая функция агрегатора, которую вы хотите.
  • Результатом является «электронная таблица» с сгруппированными атрибутами имени, когда несколько атрибутов с той же именами усреднены (элемент-мудрый).

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/python-list-of-lists-group-by-a-simple-illustrated-guide/”