Pandas Shift: Перемещение столбца DataFrame вверх или вниз
Last updated
Last updated
В этом руководстве вы научитесь использовать метод shift библиотеки Pandas для перемещения столбца DataFrame вверх или вниз. Умение сдвигать данные является важным навыком, особенно при работе с временными рядами или при расчете разницы между последовательными строками.
Метод Pandas shift()
позволяет сдвигать данные вперед или назад, а также задавать сдвиг данных временных рядов через различные интервалы. Вы узнаете, как перемещать данные вперед или назад, заполнять вновь появившиеся пропуски и работать с данными временных рядов.
Если вы знакомы с SQL, **метод Pandas shift очень похож на функции LAG() и LEAD(), доступные через популярные оконные функции.
Быстрый ответ: используйте Pandas shift
Оглавление
Метод shift в Pandas — это относительно простой метод, который открывает значительные возможности для вашего анализа. Например, вы можете сравнивать различия между последующими строками.
Если вы используете другие приложения для анализа данных (например, Excel), может показаться хорошей идеей сравнивать строки, запись за записью. Однако итерация по DataFrame в Pandas — медленный процесс.
Эта функция Pandas shift оказывается весьма полезной. Она предоставляет возможность сравнивать строки на разных интервалах в векторизованном формате.
Давайте посмотрим, как работает метод shift в Pandas и какие у него аргументы:
Давайте рассмотрим, что делают параметры метода 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
Направление, в котором следует смещаться
Чтобы следовать этому руководству слово в слово, я предоставил пример DataFrame Pandas, который вы можете загрузить. Просто скопируйте и вставьте этот код в ваш любимый редактор кода, и мы можем начать:
Мы видим, что загрузили DataFrame с различными столбцами и затем вывели первые пять записей, используя метод df.head()
из библиотеки Pandas
В следующем разделе вы узнаете, как сдвигать весь датафрейм, используя метод сдвига Pandas.
Есть случаи, когда вам нужно переместить все записи в Pandas DataFrame вверх или вниз. Когда мы применяем метод .shift()
ко всему dataframe, все записи в этом dataframe сдвигаются.
Один из аргументов метода .shift()
в Pandas — это аргумент periods=
, который позволяет передать целое число. Это число определяет количество периодов, на которое необходимо сдвинуть данные.
Если целое число, переданное в аргумент periods=
, положительное, данные будут сдвинуты вниз. Если аргумент отрицательный, данные сдвигаются вверх.
Давайте попробуем переместить наши записи на одну строку вниз, используя Pandas
Мы видим, что исходные данные сдвинуты на одну строку вниз.
Если мы хотим переместить наши данные на одну строку вверх, мы можем передать periods=-1
. Давайте попробуем это сделать.
В следующем разделе вы узнаете, как сдвинуть значения только одного столбца в DataFrame Pandas.
В предыдущем разделе вы научились сдвигать строки всего датафрейма. В этом разделе вы узнаете, как сдвигать значения только одного столбца. Это имеет множество практических применений, например, возможность вычислять разницу между последовательными записями (чему вы научитесь в следующем разделе этого руководства).
Способ, которым мы можем достичь этого в Pandas, заключается в применении функции к серии Pandas (т. е. столбцу), а не ко всему dataframe. Хотя не обязательно создавать новый столбец при этом (можно переопределить его же), мы создадим новый столбец, чтобы показать, как это работает.
В приведенном ниже примере мы сместим столбец Amount
на одну запись вниз и назовем его Amount (Shifted)
:
Мы видим, что значения из столбца Amount сдвинулись вниз на одну строку. Если мы просто хотим сдвинуть данные, а не создавать новый столбец, можно переназначить столбец самому себе: df['Amount'] = df['Amount'].shift(periods=1)
.
Вы заметите, что в новом столбце есть пропущенные значения там, где были сдвинутые значения. В следующем разделе вы узнаете, как заполнить эти пропущенные значения с помощью метода сдвига в Pandas
При сдвиге значений в DataFrame Pandas в результате может возникнуть отсутствие значений NaN
в таблице. К счастью, метод сдвига Pandas включает аргумент fill_value=
, который позволяет установить значение для заполнения пропусков.
Посмотрим, как можно сдвинуть данные Amount
на строку вниз и заполнить значение числом 100:
Мы видим, что ранее отсутствующая первая строка теперь заполнена значением 100.
Бывают случаи, когда вам нужно заполнить пропуски в данных. Например, если вы хотите, чтобы значение заполнения было динамичным и адаптировалось к изменяющимся данным, можно использовать среднее значение столбца. Это можно сделать, передав в функцию, которая вычисляет среднее значение столбца Pandas DataFrame, в качестве параметра.
Давайте посмотрим, как мы можем заполнить недостающие данные путем замещения средним значением
В следующем разделе вы научитесь изменять временные ряды с помощью метода shift из библиотеки.
Метод shift в Pandas может также сдвигать данные на основе временных рядов, что позволяет производить сложные сдвиги данных на разные временные периоды.
Чтобы продемонстрировать, как это работает, давайте создадим новый датафрейм, который имеет временной ряд в качестве индекса. Эта часть важна: если ваш индекс не является временным рядом, то метод вызовет ошибку.
Давайте посмотрим, как мы можем использовать аргумент freq=
, чтобы задать временной интервал для сдвига нашего dataframe:
Мы видим, что смогли добавить десять дней к каждому элементу в нашем индексе. Мы также можем вычесть десять дней из элементов индекса, изменив диапазон дат на отрицательную часть.
Преимущество использования аргумента freq=
заключается в том, что он позволяет сохранять оригинальные данные, изменяя диапазоны дат.
В следующем разделе вы узнаете, как смещать столбцы в dataframe Pandas
В этом учебнике вы уже узнали, как сдвигать строки в DataFrame с помощью Pandas. В этом разделе вы узнаете, как использовать аргумент axis=
, чтобы иметь возможность сдвигать столбцы в вашем DataFrame.
Давайте разберем, что мы сделали здесь: мы применили метод .shift()
ко всему датафрейму, изменив аргумент axis на 1
. Возвращенный датафрейм имел все столбцы, сдвинутые на одну позицию, при этом имена столбцов остались прежними.
В следующих двух разделах вы изучите некоторые применимые функции метода shift в Pandas, включая вычисление разницы между последовательными строками и вычисление процентного изменения между последовательными строками.
Существует много случаев, когда вам может понадобиться вычислить разницу между последовательными строками в датафрейме Pandas. К счастью, метод shift
в Pandas делает эту операцию очень простой.
Давайте посмотрим, как мы можем использовать Pandas, чтобы сделать это:
Давайте разберём, что мы сделали здесь:
Мы создаем новый столбец, Amount (Shifted)
, который сдвигает значения на одну строку вниз и заполняет любые отсутствующие значения нулями.
Затем мы вычитаем два столбца, чтобы получить разницу между последовательными строками.
Мы также можем упростить эту процедуру, не создавая отдельный столбец, а просто записав всю операцию в одну строку:
Это избавляет нас от создания нового столбца, что может значительно увеличить использование памяти нашим датафрей.
В следующем разделе вы узнаете, как рассчитать процентное изменение между последовательными строками в Pandas DataFrame.
В этом разделе вы узнаете, как использовать метод shift в Pandas для вычисления процентного изменения между последовательными строками в DataFrame Pandas
Давайте посмотрим, как это можно сделать, прежде чем мы разберём:
Чтобы вычислить процентную разницу между последовательными строками в DataFrame Pandas, необходимо вычислить разницу между строками, а затем разделить эту разницу на сдвинутое значение.
В этом руководстве вы узнали, как использовать метод shift в Pandas для сдвига строк в DataFrame Pandas вверх или вниз. Вы также узнали, как работать с временными рядами и как заполнять пропущенные данные, созданные при сдвиге данных. Затем вы узнали, как сдвигать столбцы в DataFrame Pandas. Наконец, вы узнали два практических примера: как вычислить разницу между строками в Pandas и как вычислить процентную разницу между строками Pandas.
Видно, что у нас есть новый dataframe, где , и есть только одно дополнительное значение: сумма, увеличивающаяся от 0 до 30.
Чтобы узнать больше о методе shift библиотеки Pandas, изучите .