Bemind
Учебник Python
Учебник Python
  • Python
    • Python Lists
      • Списковые включения в Python (Полное руководство с примерами)
      • Исправление ValueError: Слишком Много Значений Для Распаковки в Python
      • Как добавить словарь в список в Python
      • Как добавить строку в список в Python
      • Разница между массивами и списками в Python
      • Python: Различия между списками и кортежами
      • Как проверить, пуст ли список в Python
      • Как Итерировать (Циклически Проходить) По Списку в Python
      • Python List sort(): Подробное руководство по сортировке списков
      • Python List Extend: Как добавить несколько элементов в список
      • Python: Найти Индекс Всех Вхождений Элемента в Списке
      • Конвертация списка словарей в Pandas DataFrame
      • Генерация случайных чисел в Python
      • Поиск Индекса в Списке Python: Найти Первое, Последнее или Все Вхождения
      • Добавить в начало списка в Python (Вставить в начало)
      • Найти дубликаты в списке Python
      • Python: Умножение Списков (6 Различных Способов)
      • Python списки: Полный обзор
      • Python: Выбор случайного элемента из списка
      • 4 Способа Очистить Список в Python
      • Объяснение ошибки IndexError в Python: индекс списка выходит за пределы допустимого диапазона
      • Python: Получение индекса максимального элемента в списке
      • Python: Объединение списков – Слияние списков (8 способов)
      • Python: Проверка наличия элемента в списке
      • Python: Проверка наличия элемента в списке
      • Удаление элемента из списка в Python (pop, remove, del, clear)
      • Как перевернуть список в Python (6 способов)
      • Python: Замена элемента в списке (6 различных способов)
      • Python: Удаление дубликатов из списка (7 способов)
      • Python: Преобразование словаря в список кортежей (4 простых способа)
      • Python: Перемешать Список (Случайное Распределение Элементов Списка в Python)
      • Python: Пересечение двух списков
      • Python: Вычитание двух списков (4 простых способа!)
      • Длина или Размер Списка в Python: 5 Способов Узнать Длину Списка
      • Python: Транспонирование списка списков (5 простых способов!)
      • Python: Разделение списка (Пополам, на части)
      • Python: Комбинации списка (Получить все комбинации списка)
      • Python: Выравнивание списка списков (4 способа)
      • Разница между списками в Python: Нахождение разницы между двумя списками Python
      • Python: Найти среднее значение списка или списка списков
      • Как добавлять элементы в списки в Python – 4 простых способа!
      • Списковые включения в Python (Полное руководство с примерами)
      • 6 способов преобразовать список Python в строку
    • Python Dictionaries
      • Понимание словаря Python (с примерами)
      • Исправляем ValueError: Слишком Много Значений Для Распаковки в Python
      • Как добавить словарь в список в Python
      • Преобразование JSON в словарь Python
      • Полное руководство по вложенным словарям в Python
      • Копирование словаря в Python: Полное руководство
      • Конвертация списка словарей в Pandas DataFrame
      • Поиск дубликатов в списке Python
      • Полный обзор словарей в Python
      • Python: Добавление пары Ключ:Значение в Словарь
      • Python: Сортировка словаря по значениям
      • Слияние Словарей в Python – Комбинирование Словарей (7 Способов)
      • Python: Удаление Дубликатов из Списка (7 Способов)
      • Python: Преобразование словаря в список кортежей (4 простых способа)
      • Python: Красивая Печать Словаря (Dictionary) – 4 Способа
      • Python: Проверка пуст ли словарь (5 способов!)
      • Copy of Python: Проверка пуст ли словарь (5 способов!)
      • Python: Проверьте, существует ли ключ (или значение) в словаре (5 простых способов)
      • Python: Проверьте, существует ли ключ (или значение) в словаре (5 простых способов)
      • Python: Получение Ключа Словаря с Максимальным Значением (4 Способа)
      • Python: Удаление ключа из словаря (4 разных способа)
      • Как красиво вывести JSON-файл в Python (6 методов)
    • Python Strings
      • Python Капитализация Строк: Руководство по Преобразованию слов в Заглавные
      • Python strip: Как обрезать строку в Python
      • Python Обратная Строка: Руководство по Реверсированию Строк
      • Как Удалить Префикс или Суффикс из Строки в Python
      • Преобразование строки в формат заголовка в Python с помощью str.title()
      • Как добавить строку в список в Python
      • Python String startswith: Проверка, начинается ли строка с подстроки
      • Python String endswith: Проверка того, заканчивается ли строка подстрокой
      • Как удалить первый или последний символ из строки в Python
      • Как исправить: SyntaxError в Python - EOL при сканировании строкового литерала
      • Python String Contains: Проверка Наличия Подстроки в Строке
      • Как проверить, пустая ли строка в Python
      • Python Новая Строка и Как Печатать Без Переноса Строки
      • Как Конкатенировать Строки в Python: Полное Руководство
      • Python: Подсчет слов в строке или файле
      • Как создать список алфавита в Python
      • Python: Конкатенация строки и целого числа (Int)
      • Python: Сортировка строки (4 различных способа)
      • Python zfill и rjust: Добавление нулей в строку в Python
      • Python: Целое в Двоичное (Преобразование целого числа в двоичную строку)
      • Python rfind: Нахождение индекса последней подстроки в строке
      • Python SHA256 хеширование алгоритм: объяснение
      • Python: Усечение числа с плавающей точкой (6 различных способов)
      • Выбор между методами Python isdigit(), isnumeric() и isdecimal()
      • Python: Удаление специальных символов из строки
      • Python Приведение Строки к Нижнему Регистру с помощью .lower(), .casefold(), и .islower()
      • Python программа для проверки, является ли строка палиндромом (6 методов)
      • Python: Найдите все перестановки строки (3 легких способа!)
      • Python: Удаление пунктуации из строки (3 разных способа!)
      • Python: Найти индекс (или все индексы) подстроки в строке
      • Python: Удаление символов новой строки из строки
      • Python: Удаление символа из строки (4 способа)
      • Python: Количество вхождений в строке (4 способа!)
    • Встроенные функции Python
      • abs()
      • ascii()
      • aiter()
      • all()
      • any()
      • anext()
      • bin()
      • bool()
      • breakpoint()
      • bytearray()
      • bytes()
      • callable()
      • chr()
      • classmethod()
      • compile()
      • complex()
      • delattr()
      • dict()
      • dir()
      • divmod()
      • enumerate()
      • eval()
      • exec()
      • filter()
      • float()
      • format()
      • frozenset()
      • getattr()
      • globals()
      • hasattr()
      • hash()
      • help()
      • hex()
      • id()
      • input()
      • int()
      • issubclass()
      • iter()
      • len()
      • list()
      • locals()
      • map()
      • max()
      • memoryview()
      • min()
      • next()
      • object()
      • oct()
      • open()
      • ord()
      • pow()
      • print()
      • property()
      • range()
      • repr()
      • reversed()
      • round()
      • set()
      • setattr()
      • isinstance()
      • slice()
      • zip()
      • type()
      • sorted()
      • staticmethod()
      • str()
      • sum()
      • super()
      • tuple()
      • vars()
      • import()
    • Cобеседования Python. Разбор реальных вопросов.
    • Встроенные методы в Python
  • Учебники по Pandas и Numpy
    • Numpy
      • Функция активации ReLU для глубокого обучения: полное руководство по выпрямленному линейному блоку
      • Как нормализовать массивы NumPy (минимальное-максимальное масштабирование, Z-оценка, L2)
      • NumPy where: Условная обработка элементов массива
      • NumPy linspace: создание равномерно расположенных массивов с помощью np.linspace
      • Как рассчитать векторное произведение в Python
      • Разделение NumPy: Разделение массива NumPy на части
      • NumPy: Лучшие способы применения функции к массиву
      • NumPy full: Создание массивов с заданным значением
      • NumPy clip(): Ограничьте значения массива минимальным и максимальным значениями
      • NumPy cumsum: Расчет кумулятивных сумм массивов NumPy
      • Изучаем функцию np.histogram в NumPy: создаем гистограмму
      • NumPy arange(): Полное руководство (с примерами)
      • Руководство по индексации и срезам массивов NumPy: Полное руководство
      • NumPy argmin(): Получение индекса минимального значения в массивах
      • Выравнивание массива с помощью NumPy flatten
      • Объединение массивов NumPy по различным осям с использованием функции stack
      • Удаление размерности из массивов NumPy с помощью NumPy Squeeze
      • Функция np.repeat() NumPy: Повторение массивов NumPy
      • Использование функции NumPy.exp() для вычисления экспоненты
      • Реализация функции сигмоида на Python
      • NumPy Pad: Использование np.pad() для дополнения массивов и матриц
      • np.argmax(): Как использовать NumPy Argmax
      • NumPy logspace: Понимание функции np.logspace()
      • Использование NumPy Tile для Расположения Массивов
      • NumPy Zeros: Создание массивов и матриц с нулями в NumPy
      • Использование числа Пи в Python (NumPy и Math)
      • Распределение Нормального (Гауссова) Распределения в Numpy (Случайное Нормальное в Numpy)
      • NumPy для Data Science на Python
      • Расчет скалярного произведения с использованием Numpy в Python
      • Расчет натурального логарифма на Python
    • Pandas
      • Python сводные таблицы – Полное руководство
      • Изучение API стиля Pandas
      • Объяснение группировки по нескольким столбцам в Pandas с примерами
      • Удаление индексной колонки DataFrame в Pandas: Руководство с примерами
      • Pandas Quantile: Расчет процентилей в DataFrame
      • Как рассчитать скользящее среднее (среднее арифметическое) в Pandas
      • Руководство по использованию метода fillna в Pandas для работы с отсутствующими данными в DataFrame
      • Pandas unique(): Получение уникальных значений в DataFrame
      • Распакуйте Ваши Данные с Помощью Функции Melt в Pandas
      • Pandas date_range: Как Создать Диапазон Дат в Pandas
      • Сброс индекса в Pandas: как сбросить индекс в Pandas
      • Pandas replace() – Замена значений в DataFrame Pandas
      • Перемещение столбца DataFrame Pandas на позицию (В начало и в конец)
      • Учебное пособие по Python Pandas: полное руководство
      • Pandas: Замена NaN на нули
      • Преобразование DataFrame Pandas в файл Pickle
      • Конвертация Pandas DataFrame в JSON
      • Преобразование DataFrame Pandas в Словарь
      • Преобразование Pandas DataFrame в Список
      • Чтение файлов Parquet в Pandas с помощью pd.read_parquet
      • Pandas dropna(): Удаление отсутствующих записей и столбцов в DataFrame
      • Как Добавить Новый Столбец в DataFrame Pandas
      • Подсчёт уникальных значений в Pandas
      • Отображение всех столбцов и строк в DataFrame Pandas
      • Pandas to_excel: Запись DataFrames в файлы Excel
      • Как использовать Pandas для чтения файлов Excel в Python
      • Преобразование списка словарей в Pandas DataFrame
      • Как добавить/вставить строку в DataFrame Pandas
      • Диаграмма рассеяния в Pandas: Как создать диаграмму рассеяния в Pandas
      • Pandas to_datetime: Преобразование строки Pandas в дату и время
      • Введение в Pandas для Data Science
      • Индексация, Выборка и Присваивание Данных в Pandas
      • Суммирование и Анализ Pandas DataFrame
      • Преобразование столбцов Pandas с помощью map и apply
      • Группировка данных в Pandas с использованием cut и qcut
      • Дата и время в Pandas и Python
      • Очистка и подготовка данных в Pandas и Python
      • Pandas GroupBy: группировка, суммирование и агрегация данных в Python
      • Pandas Дата и Время в Части Даты (месяц, год и т.д.)
      • Pandas: Получение номера строки из DataFrame
      • Вычисление Взвешенного Среднего в Pandas и Python
      • Как перемешать строки Pandas Dataframe в Python
      • Pandas: количество столбцов (подсчет столбцов в DataFrame)
      • Pandas Sum: сложение столбцов и строк DataFrame
      • Pandas Diff: Вычисление Разницы Между Строками Pandas
      • Нормализация столбца или датафрейма Pandas (с использованием Pandas или sklearn)
      • Функция Rank в Pandas: Ранжирование данных в Dataframe (Эквивалент SQL row_number)
      • Pandas Describe: Описательная статистика вашего Dataframe
      • Pandas Shift: Перемещение столбца DataFrame вверх или вниз
      • 7 Способов Выполнения Выборки Данных в Pandas
      • Экспорт DataFrame Pandas в CSV файл – Использование .to_csv()
      • Pandas: Итерация по строкам DataFrame в Pandas
      • Pandas: Преобразование значений столбца в строки
      • Дисперсия в Pandas: Вычисление дисперсии столбца в Pandas Dataframe
      • Pandas: Создание DataFrame из списков (5 способов!)
      • Pandas Rename Index: Как переименовать индекс DataFrame в Pandas
      • Pandas: Подсчёт уникальных значений в объекте GroupBy
      • Pandas: Добавить дни к колонке с датами
      • Среднее в Pandas: Как рассчитать среднее для одной или нескольких колонок
      • Pandas Column to List – Конвертируйте колонку Pandas в список
      • Транспонирование Dataframe в Pandas
      • Python: Разделение DataFrame Pandas
      • Как получить имена столбцов в DataFrame Pandas
  • Учебники Matplotlib и Seaborn
    • Seaborn
      • Регрессионные графики в Seaborn с использованием regplot и lmplot
      • Seaborn residplot – Построение остатков линейной регрессии
      • Seaborn jointplot() – Создание совместных графиков в Seaborn
      • Seaborn displot – Распределенческие графики в Python
      • Seaborn ecdfplot – Эмпирические функции накопленного распределения
      • Seaborn rugplot – Визуализация маргинальных распределений
      • Seaborn kdeplot – Создание графиков оценки плотности ядра
      • Seaborn histplot – Создание Гистограмм в Seaborn
      • Seaborn catplot – Визуализация категориальных данных в Python
      • Средняя тенденция для категориальных данных в Seaborn Pointplot
      • Seaborn stripplot: Jitter Plots для распределений категориальных данных
      • Seaborn Countplot – Подсчет категориальных данных в Python
      • Seaborn swarmplot: Bee Swarm Plots для распределения категориальных данных
      • Скрипичные графики Seaborn в Python: Полное руководство
      • Настройка расположения легенд Seaborn, меток, текста и т.д.
      • Тепловая карта Seaborn: Полное руководство
      • Создание многосекционных сеток в Seaborn с помощью FacetGrid
      • Удаление рамки в Seaborn: Как работать с рамкой
      • Заголовки и метки осей в Seaborn: добавление и настройка
      • Как установить Seaborn в Python (Исправление: no module named seaborn)
      • Seaborn relplot – Создание точечных и линейных графиков
    • Matplotlib
      • Режим Retina в Matplotlib: Улучшение Качества Графиков
      • Как построить функцию в Python с использованием Matplotlib
      • Как создать 3D-диаграммы рассеяния в Matplotlib
      • Как изменить размер шрифта в графике Matplotlib
      • Установка размера маркера в точечных диаграммах Matplotlib
      • Как изменить размер графика и фигуры в Matplotlib
      • Как добавить названия в Matplotlib: Заголовок, Подзаголовок, Названия Осей
      • Pandas Scatter Plot: Как создать диаграмму рассеяния в Pandas
      • Построение графиков в Python с помощью Matplotlib
      • Диаграммы рассеяния Matplotlib – Все, что вам нужно знать
      • Диаграммы с столбцами в Matplotlib – Узнайте все, что вам нужно знать
      • Линейные диаграммы Matplotlib – Всё, что вам нужно знать
      • Построение гистограммы в Python с Matplotlib и Pandas
  • Алгоритмы
    • Алгоритм поиска в ширину (BFS) в Python
    • Алгоритм поиска в глубину (DFS) на Python
  • AI создает хедж-фонд для анализа акций на Python
Powered by GitBook
On this page
  • Объяснение сдвига Pandas
  • Загрузка образца Pandas Dataframe
  • Сдвиг всего Dataframe с помощью Pandas Shift
  • Смещение значений строк Dataframe с помощью Pandas Shift
  • Заполнение пропущенных значений при использовании Pandas Shift
  • Сдвиг данных временных рядов с помощью Pandas Shift
  • Сдвиг столбцов Pandas Dataframe с помощью Pandas Shift
  • Вычислить разницу между последовательными строками в Pandas
  • Рассчитайте процентное изменение между последовательными строками в Pandas
  • Заключение
  1. Учебники по Pandas и Numpy
  2. Pandas

Pandas Shift: Перемещение столбца DataFrame вверх или вниз

PreviousPandas Describe: Описательная статистика вашего DataframeNext7 Способов Выполнения Выборки Данных в Pandas

Last updated 1 month ago

В этом руководстве вы научитесь использовать метод shift библиотеки Pandas для перемещения столбца DataFrame вверх или вниз. Умение сдвигать данные является важным навыком, особенно при работе с временными рядами или при расчете разницы между последовательными строками.

Метод Pandas shift() позволяет сдвигать данные вперед или назад, а также задавать сдвиг данных временных рядов через различные интервалы. Вы узнаете, как перемещать данные вперед или назад, заполнять вновь появившиеся пропуски и работать с данными временных рядов.

Если вы знакомы с SQL, **метод Pandas shift очень похож на функции LAG() и LEAD(), доступные через популярные оконные функции.

Быстрый ответ: используйте Pandas shift

# Объяснение метода Pandas .shift()

df.shift(
    periods=1,       # Количество периодов для сдвига
    freq=None,      # Сдвиг на основе данных временных рядов
    fill_value=None, # Чем заполнить отсутствующие данные после сдвига
    axis=0           # Сдвигать строки или столбцы
)

Оглавление

Объяснение сдвига Pandas

Метод shift в Pandas — это относительно простой метод, который открывает значительные возможности для вашего анализа. Например, вы можете сравнивать различия между последующими строками.

Если вы используете другие приложения для анализа данных (например, Excel), может показаться хорошей идеей сравнивать строки, запись за записью. Однако итерация по DataFrame в Pandas — медленный процесс.

Эта функция Pandas shift оказывается весьма полезной. Она предоставляет возможность сравнивать строки на разных интервалах в векторизованном формате.

Давайте посмотрим, как работает метод shift в Pandas и какие у него аргументы:

df.shift(
    periods=1,       # Количество периодов для сдвига (положительное - вниз/вправо, отрицательное - вверх/влево)
    freq=None,      # Сдвиг на основе данных временных рядов (например, 'D' для дней, 'H' для часов)
    fill_value=None, # Значение для заполнения отсутствующих данных после сдвига
    axis=0           # Ось для сдвига (0 - строки, 1 - столбцы)
)

Давайте рассмотрим, что делают параметры метода shift в Pandas

Аргумент
Тип данных
Объяснение

periods=

int

Количество периодов, на которые необходимо сдвинуть данные. Может быть положительным или отрицательным.

freq=

DateOffset, tseries.offsets, timedelta, or str, optional

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

fill_value=

object, optional

Скаляр для заполнения данных. Тип данных определяется из самого столбца, если только не передан другой тип данных.

axis=

{0 or ‘index’, 1 or ‘columns’, None}, default None

Направление, в котором следует смещаться

Загрузка образца Pandas Dataframe

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

# Загрузка примера DataFrame Pandas

import pandas as pd

# Создание DataFrame из словаря
df = pd.DataFrame.from_dict({
    'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'],  # Имена
    'Amount': [100, 200, 210, 120, 70, 95, 90]  # Суммы
})

print(df.head())  # Вывод первых 5 строк DataFrame

# Результат:
#    Name  Amount
# 0   Nik     100
# 1  Jane     200
# 2  Kate     210
# 3  Evan     120
# 4   Max      70

Мы видим, что загрузили DataFrame с различными столбцами и затем вывели первые пять записей, используя метод df.head() из библиотеки Pandas

В следующем разделе вы узнаете, как сдвигать весь датафрейм, используя метод сдвига Pandas.

Сдвиг всего Dataframe с помощью Pandas Shift

Есть случаи, когда вам нужно переместить все записи в Pandas DataFrame вверх или вниз. Когда мы применяем метод .shift() ко всему dataframe, все записи в этом dataframe сдвигаются.

Один из аргументов метода .shift() в Pandas — это аргумент periods=, который позволяет передать целое число. Это число определяет количество периодов, на которое необходимо сдвинуть данные.

Если целое число, переданное в аргумент periods=, положительное, данные будут сдвинуты вниз. Если аргумент отрицательный, данные сдвигаются вверх.

Давайте попробуем переместить наши записи на одну строку вниз, используя Pandas

# Сдвиг всего DataFrame Pandas

import pandas as pd

df = pd.DataFrame.from_dict({'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'], 'Amount': [100, 200, 210, 120, 70, 95, 90]})

# Вывод исходного DataFrame
print('Original dataframe')
print(df.head())

# Сдвиг DataFrame и повторный вывод
df = df.shift(periods=1)  # Сдвиг DataFrame на 1 период вниз
print('\nShifted Dataframe')
print(df.head())

# Результат:
# Original dataframe
#    Name  Amount
# 0   Nik     100
# 1  Jane     200
# 2  Kate     210
# 3  Evan     120
# 4   Max      70

# Shifted Dataframe
#    Name  Amount
# 0   NaN     NaN
# 1   Nik   100.0
# 2  Jane   200.0
# 3  Kate   210.0
# 4  Evan   120.0

Мы видим, что исходные данные сдвинуты на одну строку вниз.

Если мы хотим переместить наши данные на одну строку вверх, мы можем передать periods=-1. Давайте попробуем это сделать.

# Сдвиг всего DataFrame Pandas

import pandas as pd

df = pd.DataFrame.from_dict({'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'], 'Amount': [100, 200, 210, 120, 70, 95, 90]})

# Вывод исходного DataFrame
print('Original dataframe')
print(df.head())

# Сдвиг DataFrame и повторный вывод
df = df.shift(periods=-1)  # Сдвиг DataFrame на 1 период вверх
print('\nShifted Dataframe')
print(df.head())

# Результат:
# Original dataframe
#    Name  Amount
# 0   Nik     100
# 1  Jane     200
# 2  Kate     210
# 3  Evan     120
# 4   Max      70

# Shifted Dataframe
#     Name  Amount
# 0   Jane   200.0
# 1   Kate   210.0
# 2   Evan   120.0
# 3    Max    70.0
# 4  Kevin    95.0

В следующем разделе вы узнаете, как сдвинуть значения только одного столбца в DataFrame Pandas.

Смещение значений строк Dataframe с помощью Pandas Shift

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

Способ, которым мы можем достичь этого в Pandas, заключается в применении функции к серии Pandas (т. е. столбцу), а не ко всему dataframe. Хотя не обязательно создавать новый столбец при этом (можно переопределить его же), мы создадим новый столбец, чтобы показать, как это работает.

В приведенном ниже примере мы сместим столбец Amount на одну запись вниз и назовем его Amount (Shifted) :

# Сдвиг одного столбца в DataFrame Pandas

import pandas as pd

df = pd.DataFrame.from_dict({'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'], 'Amount': [100, 200, 210, 120, 70, 95, 90]})

df['Amount (Shifted)'] = df['Amount'].shift(periods=1)  # Создание нового столбца 'Amount (Shifted)' со сдвинутыми значениями столбца 'Amount' на 1 период вниз

print(df.head())  # Вывод первых 5 строк DataFrame

# Результат:
#    Name  Amount  Amount (Shifted)
# 0   Nik     100               NaN
# 1  Jane     200             100.0
# 2  Kate     210             200.0
# 3  Evan     120             210.0
# 4   Max      70             120.0

Мы видим, что значения из столбца Amount сдвинулись вниз на одну строку. Если мы просто хотим сдвинуть данные, а не создавать новый столбец, можно переназначить столбец самому себе: df['Amount'] = df['Amount'].shift(periods=1).

Вы заметите, что в новом столбце есть пропущенные значения там, где были сдвинутые значения. В следующем разделе вы узнаете, как заполнить эти пропущенные значения с помощью метода сдвига в Pandas

Заполнение пропущенных значений при использовании Pandas Shift

При сдвиге значений в DataFrame Pandas в результате может возникнуть отсутствие значений NaN в таблице. К счастью, метод сдвига Pandas включает аргумент fill_value=, который позволяет установить значение для заполнения пропусков.

Посмотрим, как можно сдвинуть данные Amount на строку вниз и заполнить значение числом 100:

# Сдвиг одного столбца в DataFrame Pandas и заполнение отсутствующих данных

import pandas as pd

df = pd.DataFrame.from_dict({'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'], 'Amount': [100, 200, 210, 120, 70, 95, 90]})

df['Amount (Shifted)'] = df['Amount'].shift(periods=1, fill_value=100)  # Создание нового столбца 'Amount (Shifted)' со сдвинутыми значениями столбца 'Amount' на 1 период вниз и заполнением NaN значением 100

print(df.head())  # Вывод первых 5 строк DataFrame

# Результат:
#    Name  Amount  Amount (Shifted)
# 0   Nik     100               100
# 1  Jane     200               100
# 2  Kate     210               200
# 3  Evan     120               210
# 4   Max      70               120

Мы видим, что ранее отсутствующая первая строка теперь заполнена значением 100.

Бывают случаи, когда вам нужно заполнить пропуски в данных. Например, если вы хотите, чтобы значение заполнения было динамичным и адаптировалось к изменяющимся данным, можно использовать среднее значение столбца. Это можно сделать, передав в функцию, которая вычисляет среднее значение столбца Pandas DataFrame, в качестве параметра.

Давайте посмотрим, как мы можем заполнить недостающие данные путем замещения средним значением

# Сдвиг одного столбца в DataFrame Pandas и заполнение отсутствующих данных вычисленным средним значением

import pandas as pd

df = pd.DataFrame.from_dict({'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'], 'Amount': [100, 200, 210, 120, 70, 95, 90]})

df['Amount (Shifted)'] = df['Amount'].shift(periods=1, fill_value=df['Amount'].mean())  # Создание нового столбца 'Amount (Shifted)' со сдвинутыми значениями столбца 'Amount' на 1 период вниз и заполнением NaN средним значением столбца 'Amount'

print(df.head())  # Вывод первых 5 строк DataFrame

# Результат:
#    Name  Amount  Amount (Shifted)
# 0   Nik     100               100
# 1  Jane     200               100
# 2  Kate     210               200
# 3  Evan     120               210
# 4   Max      70               120

В следующем разделе вы научитесь изменять временные ряды с помощью метода shift из библиотеки.

Сдвиг данных временных рядов с помощью Pandas Shift

Метод shift в Pandas может также сдвигать данные на основе временных рядов, что позволяет производить сложные сдвиги данных на разные временные периоды.

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

# Загрузка DataFrame с индексом временного ряда

import pandas as pd

date_range = pd.date_range(start='2021-11-01', end='2021-11-30')  # Создание диапазона дат с 1 по 30 ноября 2021 года
values = [i for i in range(30)]  # Создание списка значений от 0 до 29

df = pd.DataFrame.from_dict({'Date':date_range, 'Amount':values}).set_index('Date')  # Создание DataFrame из словаря, установка столбца 'Date' в качестве индекса

print(df.head())  # Вывод первых 5 строк DataFrame

# Результат:
#             Amount
# Date              
# 2021-11-01       0
# 2021-11-02       1
# 2021-11-03       2
# 2021-11-04       3
# 2021-11-05       4

Давайте посмотрим, как мы можем использовать аргумент freq=, чтобы задать временной интервал для сдвига нашего dataframe:

# Загрузка DataFrame с индексом временного ряда и сдвиг индекса

import pandas as pd

date_range = pd.date_range(start='2021-11-01', end='2021-11-30')  # Создание диапазона дат с 1 по 30 ноября 2021 года
values = [i for i in range(30)]  # Создание списка значений от 0 до 29
df = pd.DataFrame.from_dict({'Date':date_range, 'Amount':values}).set_index('Date')  # Создание DataFrame из словаря, установка столбца 'Date' в качестве индекса

df = df.shift(freq='5d')  # Сдвиг индекса на 5 дней вперед

print(df.head())  # Вывод первых 5 строк DataFrame

# Результат:
#             Amount
# Date              
# 2021-11-06       0
# 2021-11-07       1
# 2021-11-08       2
# 2021-11-09       3
# 2021-11-10       4 

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

Преимущество использования аргумента freq= заключается в том, что он позволяет сохранять оригинальные данные, изменяя диапазоны дат.

В следующем разделе вы узнаете, как смещать столбцы в dataframe Pandas

Сдвиг столбцов Pandas Dataframe с помощью Pandas Shift

В этом учебнике вы уже узнали, как сдвигать строки в DataFrame с помощью Pandas. В этом разделе вы узнаете, как использовать аргумент axis=, чтобы иметь возможность сдвигать столбцы в вашем DataFrame.

# Сдвиг столбцов DataFrame Pandas

import pandas as pd

df = pd.DataFrame.from_dict({'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'], 'Amount': [100, 200, 210, 120, 70, 95, 90]})

df = df.shift(periods=1, axis=1)  # Сдвиг столбцов DataFrame на 1 позицию вправо

print(df)  # Вывод DataFrame

# Результат:
#    Name Amount
# 0   NaN    Nik
# 1   NaN   Jane
# 2   NaN   Kate
# 3   NaN   Evan
# 4   NaN    Max
# 5   NaN  Kevin
# 6   NaN   Luke

Давайте разберем, что мы сделали здесь: мы применили метод .shift() ко всему датафрейму, изменив аргумент axis на 1. Возвращенный датафрейм имел все столбцы, сдвинутые на одну позицию, при этом имена столбцов остались прежними.

В следующих двух разделах вы изучите некоторые применимые функции метода shift в Pandas, включая вычисление разницы между последовательными строками и вычисление процентного изменения между последовательными строками.

Вычислить разницу между последовательными строками в Pandas

Существует много случаев, когда вам может понадобиться вычислить разницу между последовательными строками в датафрейме Pandas. К счастью, метод shift в Pandas делает эту операцию очень простой.

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

# Вычисление разницы между последовательными строками в DataFrame Pandas

import pandas as pd

df = pd.DataFrame.from_dict({'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'], 'Amount': [100, 200, 210, 120, 70, 95, 90]})

df['Amount (Shifted)'] = df['Amount'].shift(periods=1, fill_value=0)  # Создание столбца со сдвинутыми значениями 'Amount'
df['Amount (Difference)'] = df['Amount'] - df['Amount (Shifted)']  # Создание столбца с разницей между текущим и предыдущим значением

print(df)  # Вывод DataFrame

# Результат:
#     Name  Amount  Amount (Shifted)  Amount (Difference)
# 0    Nik     100                 0                  100
# 1   Jane     200               100                  100
# 2   Kate     210               200                   10
# 3   Evan     120               210                  -90
# 4    Max      70               120                  -50
# 5  Kevin      95                70                   25
# 6   Luke      90                95                   -5

Давайте разберём, что мы сделали здесь:

  1. Мы создаем новый столбец, Amount (Shifted), который сдвигает значения на одну строку вниз и заполняет любые отсутствующие значения нулями.

  2. Затем мы вычитаем два столбца, чтобы получить разницу между последовательными строками.

Мы также можем упростить эту процедуру, не создавая отдельный столбец, а просто записав всю операцию в одну строку:

df['Amount (Difference)'] = df['Amount'] - df['Amount'].shift(periods=1, fill_value=0)

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

В следующем разделе вы узнаете, как рассчитать процентное изменение между последовательными строками в Pandas DataFrame.

Рассчитайте процентное изменение между последовательными строками в Pandas

В этом разделе вы узнаете, как использовать метод shift в Pandas для вычисления процентного изменения между последовательными строками в DataFrame Pandas

Давайте посмотрим, как это можно сделать, прежде чем мы разберём:

# Вычисление процентной разницы между последовательными строками в DataFrame Pandas

import pandas as pd

df = pd.DataFrame.from_dict({'Name': ['Nik', 'Jane', 'Kate', 'Evan', 'Max', 'Kevin', 'Luke'], 'Amount': [150, 200, 210, 120, 170, 195, 190]})

df['% Difference'] = (df['Amount'] - df['Amount'].shift(periods=1)) / df['Amount'].shift(periods=1)  # Вычисление процентной разницы и создание нового столбца

print(df)  # Вывод DataFrame

# Результат:
#     Name  Amount  % Difference
# 0    Nik     150           NaN
# 1   Jane     200      0.333333
# 2   Kate     210      0.050000
# 3   Evan     120     -0.428571
# 4    Max     170      0.416667
# 5  Kevin     195      0.147059
# 6   Luke     190     -0.025641

Чтобы вычислить процентную разницу между последовательными строками в DataFrame Pandas, необходимо вычислить разницу между строками, а затем разделить эту разницу на сдвинутое значение.

Заключение

В этом руководстве вы узнали, как использовать метод shift в Pandas для сдвига строк в DataFrame Pandas вверх или вниз. Вы также узнали, как работать с временными рядами и как заполнять пропущенные данные, созданные при сдвиге данных. Затем вы узнали, как сдвигать столбцы в DataFrame Pandas. Наконец, вы узнали два практических примера: как вычислить разницу между строками в Pandas и как вычислить процентную разницу между строками Pandas.

Видно, что у нас есть новый dataframe, где , и есть только одно дополнительное значение: сумма, увеличивающаяся от 0 до 30.

Чтобы узнать больше о методе shift библиотеки Pandas, изучите .

индекс — это диапазон дат
официальную документацию здесь
Объяснение сдвига Pandas
Загрузка образца Pandas Dataframe
Сдвиг всего Dataframe с помощью Pandas Shift
Смещение значений строк Dataframe с помощью Pandas Shift
Заполнение пропущенных значений при использовании Pandas Shift
Сдвиг данных временных рядов с помощью Pandas Shift
Сдвиг столбцов Pandas Dataframe с помощью Pandas Shift
Вычислить разницу между последовательными строками в Pandas
Рассчитайте процентное изменение между последовательными строками в Pandas
Заключение