Как выполнить операцию unpivot в библиотеке pandas и преобразовать данные из широкого формата в длинный формат в Python

Unpivot — это процесс преобразования данных из широкого формата в длинный формат. В pandas это достигается с помощью метода pd.melt(). В этой статье мы рассмотрим, как использовать этот метод для выполнения unpivot операции.

Широкий формат данных, также известный как формат «wide», представляет данные в виде нескольких столбцов, где каждый столбец содержит одну переменную. Длинный формат данных, или формат «long», представляет данные в форме столбцов «variable» и «value», где каждая строка содержит значение переменной и ее соответствующее значение.

Метод pd.melt() позволяет нам задать идентификаторы столбцов, которые должны оставаться неизменными, и столбец, который должен быть расплавлен. Определенный результат зависит от структуры данных и требуемой конфигурации.

Что такое unpivot в pandas?

Когда мы проводим unpivot в pandas, мы изменяем структуру данных таким образом, чтобы каждая строка содержала только одну переменную и ее соответствующее значение. Это может быть полезно, например, при агрегации данных или выполнении анализа.

Unpivot в pandas можно выполнить с помощью метода pd.melt(). Он позволяет указать столбцы-идентификаторы (variables) и столбцы, которые нужно преобразовать (value_vars). Метод также предлагает возможность переименовать столбцы и добавить новый столбец с именем переменной (variable) для хранения идентификатора переменной.

Зачем нужен unpivot в pandas?

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

Unpivot позволяет легко преобразовать данные из широкого формата в длинный формат, где каждая пара столбцов «ключ-значение» представляет одну строку в новом датафрейме. Это позволяет удобно работать с данными в дальнейшем анализе и визуализации.

Преимущества использования unpivot в pandas включают:

  • Удобство преобразования широких данных в длинный формат
  • Сохранение связей между данными и переменными
  • Упрощение процесса фильтрации, сортировки и анализа данных

Таким образом, unpivot в pandas является мощным инструментом, который помогает упорядочить и структурировать данные для дальнейшего анализа и визуализации.

Подготовка данных

Перед выполнением операции unpivot в pandas необходимо подготовить данные. В первую очередь, проверьте, что у вас есть стандартная таблица с явно определенными столбцами и значениями.

Если ваша таблица содержит ненужные столбцы или строки, удалите их, чтобы облегчить последующую обработку данных. Также проверьте, что значения в столбцах заполнены корректно и отсутствуют пропуски.

Дополнительно, вы можете добавить столбец с идентификаторами, чтобы уникально идентифицировать каждую строку. Это может быть полезно, если в исходных данных отсутствует уникальный идентификатор.

Использование функции melt

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

Для использования функции melt необходимо передать в нее исходный датафрейм и установить параметры, такие как значения идентификаторов (id_vars) и значения переменных (value_vars). Например, если у нас есть датафрейм с колонками «ID», «Страна», «Год1», «Год2», «Год3», то мы можем использовать функцию melt, чтобы преобразовать его в формат, где каждая строка будет содержать информацию о конкретной стране, годе и соответствующем значении.

Пример использования функции melt:

import pandas as pd
# Создание исходного датафрейма
data = {
"ID": [1, 2, 3],
"Страна": ["Россия", "США", "Китай"],
"Год1": [1000, 2000, 3000],
"Год2": [1500, 2500, 3500],
"Год3": [2000, 3000, 4000]
}
df = pd.DataFrame(data)
# Применение функции melt
df_melted = df.melt(
id_vars=["ID", "Страна"],
value_vars=["Год1", "Год2", "Год3"],
var_name="Год",
value_name="Значение"
)
print(df_melted)

Результат выполнения кода:

   ID  Страна   Год  Значение
0   1  Россия  Год1      1000
1   2     США  Год1      2000
2   3   Китай  Год1      3000
3   1  Россия  Год2      1500
4   2     США  Год2      2500
5   3   Китай  Год2      3500
6   1  Россия  Год3      2000
7   2     США  Год3      3000
8   3   Китай  Год3      4000

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

Применение метода stack

Применение метода stack() особенно полезно, когда у нас есть несколько столбцов, которые представляют разные категории и должны быть объединены в одном столбце после unpivot.

В данном контексте, метод stack() позволяет в первую очередь выбрать столбцы, которые нужно использовать для объединения в одной колонке. Затем он переворачивает эти столбцы в строки, создавая новый столбец с мультииндексом, в котором первый уровень представляет исходные столбцы, а второй уровень — значения из этих столбцов.

Столбцы, которые не были выбраны для объединения, сохраняются в итоговом DataFrame без изменений. Таким образом, метод stack() позволяет гибко управлять тем, какие столбцы объединяются и какие остаются неизменными.

Пример использования метода stack() в реальной задаче:

  1. Выберем все столбцы, содержащие категорию продукта («Product A», «Product B», «Product C») и объединим их в одном столбце с помощью метода stack().
  2. Оставшиеся столбцы (например, «Year», «Sales») останутся неизменными и будут общими для всех периодов и продуктов.
  3. Итоговый DataFrame будет содержать только столбцы «Year», «Sales» и новый столбец с объединенными категориями продукта.

Метод stack() — это мощный инструмент для выполнения операции unpivot в pandas. Он позволяет гибко настраивать процесс преобразования и получать нужные данные в нужном формате.

Примеры использования

Вот несколько примеров использования функции unpivot в библиотеке pandas:

  • Пример 1:

    Представим, что у нас есть DataFrame с данными о продажах товаров:

         продукт   День1   День2   День3
    0  Товар1      10      20      30
    1  Товар2      15      25      35
    2  Товар3      10      30      20
    

    Мы хотим преобразовать этот DataFrame, чтобы вместо столбцов «День1», «День2», «День3» был только один столбец «День» и значения продаж были в другом столбце:

                     продукт    День   Продажи
    0  Товар1      День1     10
    1  Товар1      День2     20
    2  Товар1      День3     30
    3  Товар2      День1     15
    4  Товар2      День2     25
    5  Товар2      День3     35
    6  Товар3      День1     10
    7  Товар3      День2     30
    8  Товар3      День3     20
    

    Для этого мы можем использовать функцию unpivot следующим образом:

    df = df.unstack().reset_index()
    df.columns = ["продукт", "День", "Продажи"]
    
  • Пример 2:

    Допустим, у нас есть DataFrame с данными о погоде в разных городах:

       Город   Январь   Февраль   Март
    0  Москва      -10        -8        -5
    1  Питер        -5        -3         0
    2  Казань       -7        -6        -3
    

    Мы хотим преобразовать DataFrame таким образом, чтобы у нас было только два столбца: «Город» и «Температура», а месяцы стали значениями в новом столбце «Месяц»:

         Город    Месяц   Температура
    0  Москва   Январь        -10
    1  Москва  Февраль         -8
    2  Москва     Март         -5
    3  Питер    Январь         -5
    4  Питер   Февраль         -3
    5  Питер      Март          0
    6  Казань   Январь         -7
    7  Казань  Февраль         -6
    8  Казань     Март         -3
    

    Используя функцию unpivot, мы можем выполнить такое преобразование:

    df = df.melt(id_vars=["Город"], var_name="Месяц", value_name="Температура")
    

Оцените статью