4 совета по преобразованию столбцов строк Pandas

pandas
4 совета по преобразованию столбцов строк Pandas

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Всем привет, меня зовут Питер~

В этой статье представлены 4 метода преобразования строк и столбцов в Pandas, в том числе:

  • melt
  • Транспонировать T или транспонировать
  • wide_to_long
  • взорвать (функция взрыва)

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

Преобразование строки в столбец Pandas

В pandas есть несколько способов реализовать преобразование строки в столбец:

библиотека импорта

import pandas as pd
import numpy as np

функция расплава

Основные параметры расплава:

pandas.melt(frame, 
            id_vars=None, 
            value_vars=None, 
            var_name=None, 
            value_name='value',
            ignore_index=True,  
            col_level=None)

Значение параметров поясняется ниже:

  • кадр: кадр данных DataFrame для обработки.

  • id_vars: указываетне нужно конвертироватьимя столбца

  • value_vars: указываетнужно преобразовать, если нужно преобразовать все оставшиеся столбцы, можно не писать

  • var_name и value_name: настройте имя столбца в соответствии с настройкой, что эквивалентно получению нового имени столбца.

  • igonore_index: игнорировать ли исходное имя столбца, по умолчанию установлено значение True, то есть игнорировать исходное имя индекса и перегенерировать естественный индекс 0, 1, 2, 3, 4....

  • col_level: если столбец является столбцом многоуровневого индекса MultiIndex, используйте этот параметр; этот параметр используется редко.

Данные моделирования

# 待转换的数据:frame
df = pd.DataFrame({"col1":[1,1,1,1,1],
                   "col2":[3,3,3,3,3],
                   "col3":["a","a","a","b","b"]
                  })
df

id_vars

value_vars

Используйте два вышеуказанных параметра одновременно:

Преобразование нескольких свойств столбца одновременно:

имя_переменной и имя_значения

pd.melt(
    df,
    id_vars=["col1"],  # 不变
    value_vars=["col3"],  # 转变
    var_name="col4",  # 新的列名
    value_name="col5" # 对应值的新列名
)

ignore_index

По умолчанию создаются естественные индексы:

Можно изменить на False, чтобы использовать исходный индекс:

Функция транспонирования

Атрибут T или функция транспонирования в pandas заключается в реализации функции строки в столбец, если быть точным, транспонировании

простое транспонирование

Смоделируйте часть данных и посмотрите результат транспонирования:

Транспонировать с помощью функции транспонирования:

Есть и другой способ: сначала транспонировать значения, а затем поменять местами индекс и имена столбцов:

Наконец, посмотрите на простой случай:

функция wide_to_long

Буквально: преобразовать набор данных из широкого формата в длинный формат.

wide_to_long(
    df,
    stubnames,
    i,
    j,
    sep: str = "",
    suffix: str = "\\d+"

Конкретное объяснение параметров:

  • df: фрейм данных, который нужно преобразовать
  • stubnames: часть хранилища с тем же именем столбца в широкой таблице
  • i: столбец для использования в качестве переменной идентификатора
  • j: установить столбцы для столбцов «суффикс» длинного формата
  • sep: установите разделитель для удаления. Например, если столбцы имеют значение A-2020, укажите sep='-', чтобы удалить разделитель. По умолчанию пусто.
  • суффикс: получить «суффикс», установив регулярное выражение. По умолчанию '\d+' означает получение суффикса числа. "Суффикс" без цифр можно получить с помощью '\D+'

Данные моделирования

процесс преобразования

Используйте функции для реализации преобразований:

Настроить многоуровневый индекс

Сначала смоделируйте данные:

Если вы не привыкли к многоуровневым индексам, вы можете конвертировать в следующий формат:

sep и суффикс

df5 = pd.DataFrame({
    'a': [1, 1, 2, 2, 3, 3, 3],
    'b': [1, 2, 2, 3, 1, 2, 3],
    'stu_one': [2.8, 2.9, 1.8, 1.9, 2.2, 2.3, 2.1],
    'stu_two': [3.4, 3.8, 2.8, 2.4, 3.3, 3.4, 2.9]
})
df5

pd.wide_to_long(
    df5, 
    stubnames='stu', 
    i=['a', 'b'], 
    j='number',
    sep='_', # 列名中存在连接符时使用;默认为空
    suffix=r'\w+')  # 基于正则表达式的后缀;默认是数字\d+;这里改成\w+,表示字母

Функция взрыва -explode

explode(column, ignore_index=False)

Эта функция имеет всего два параметра:

  • столбец: элемент, который нужно разнести
  • ignore_index: игнорировать ли индекс; по умолчанию False, сохранить исходный индекс

Данные моделирования

взрыв одиночного поля

Выполните процесс разнесения на одном поле, превратив широкую таблицу в длинную:

Параметры ignore_index

Взрыв нескольких полей

Процесс последовательного взрыва нескольких полей:

Читатели сомневаются

Чтобы ответить на вопрос читателя, данные представлены в форме моделирования. Требуются следующие данные:

Доля каждого фрукта в каждом магазине в каждом магазине

fruit = pd.DataFrame({
    "shop":["shop1","shop3","shop2","shop3",
            "shop2","shop1","shop3","shop2",
            "shop3","shop2","shop3","shop2","shop1"],
    "fruit":["苹果","葡萄","香蕉","苹果",
             "葡萄","橘子","梨","哈密瓜",
             "葡萄","香蕉","苹果","葡萄","橘子"],
    "number":[100,200,340,150,
              200,300,90,80,340,
              150,200,300,90]})
fruit

Прежде всего, нам нужно посчитать продажи каждого фрукта в каждом магазине.

Метод 1: Многоэтапный

Метод 1 использует многоэтапное решение:

1. Общий объем продаж каждого магазина

2. Увеличьте сумму столбца shop_sum

3. Коэффициент генерации

Способ 2: используйте функцию преобразования