Pandas Diff: Вычисление Разницы Между Строками Pandas

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

Краткий ответ: Pandas diff для вычисления разницы между строками

# Понимание метода diff в Pandas
df.diff(
    periods=1,  # Периоды сдвига для вычисления разности
    axis=0      # Ось, по которой вычисляется разность
)

Оглавление

Понимание метода Pandas diff

Метод diff в Pandas позволяет найти первую дискретную разность элемента. Например, он позволяет вычислить разницу между строками в DataFrame Pandas – либо между последовательными строками, либо строками с определённым интервалом. Аналогично, он также позволяет вычислять разницу между колонками Pandas (хотя это гораздо менее тривиальная задача, чем предыдущий пример).

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

# Понимание метода diff в Pandas
df.diff(
    periods=1,          # Периоды сдвига для вычисления разности
    axis=0              # Ось, по которой вычисляется разность
)

Мы видим, что метод diff в Pandas имеет два параметра:

  • periods= давайте определим количество периодов (строк или столбцов), на которое нужно сместиться, чтобы вычислить разницу

  • axis= позволяет нам определить, рассчитывать разность по строкам (axis=0) или по столбцам (axis=1)

Теперь, когда вы хорошо понимаете, как работает метод diff в Pandas, давайте загрузим пример датафрейма для дальнейшего изучения.

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

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

# Загрузка примера DataFrame с использованием Pandas
import pandas as pd

df = pd.DataFrame.from_dict({
    'Date': pd.date_range('2022-01-01', '2022-01-11'),
    'Sales': [198, 123, 973, 761, 283, 839, 217, 666, 601, 992, 205]
})

print(df.head())

# Возвращает:
#         Date  Sales
# 0 2022-01-01    198
# 1 2022-01-02    123
# 2 2022-01-03    973
# 3 2022-01-04    761
# 4 2022-01-05    283

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

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

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

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

# Вычисление разности между двумя строками
df['Sales'] = df['Sales'].diff()

print(df.head())

# Возвращает:
#         Date  Sales
# 0 2022-01-01    NaN
# 1 2022-01-02  -75.0
# 2 2022-01-03  850.0
# 3 2022-01-04 -212.0
# 4 2022-01-05 -478.0

Мы видим, что тут Pandas сделал несколько вещей

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

  • Также видно, что в столбце Sales осталось одно значение NaN. Это происходит потому, что первое значение не из чего вычитать. Количество NaN всегда равно количеству периодов, которые мы рассчитываем.

Может быть, вы захотите назначить эту разницу в новый столбец. Именно этому вы научитесь в следующем разделе.

Присвоить разницу между строками Pandas Dataframe новому столбцу

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

# Присвоение разности между строками новому столбцу
df['Sales Difference'] = df['Sales'].diff()

print(df.head())

# Возвращает:
#         Date  Sales  Sales Difference
# 0 2022-01-01    198               NaN
# 1 2022-01-02    123             -75.0
# 2 2022-01-03    973             850.0
# 3 2022-01-04    761            -212.0
# 4 2022-01-05    283            -478.0

Таким образом, мы сохраняем исходные данные, но также получаем более глубокое понимание наших данных, отображая различия.

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

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

Давайте посмотрим, как рассчитать разницу между периодичностью в семь дней:

# Изменение периодичности разности между строками
df['Sales Difference'] = df['Sales'].diff(periods=7)

print(df.head(10))

# Возвращает:
#         Date  Sales  Sales Difference
# 0 2022-01-01    198               NaN
# 1 2022-01-02    123               NaN
# 2 2022-01-03    973               NaN
# 3 2022-01-04    761               NaN
# 4 2022-01-05    283               NaN
# 5 2022-01-06    839               NaN
# 6 2022-01-07    217               NaN
# 7 2022-01-08    666             468.0
# 8 2022-01-09    601             478.0
# 9 2022-01-10    992              19.0

Теперь мы можем вычислить разницу между строкой 8 и строкой 1, строкой 9 и строкой 2 и так далее. Из-за этого первые семь строк будут отображать значение NaN.

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

Вычисление разницы между столбцами Pandas

Pandas предлагает множество способов вычитания столбцов. Один из этих способов — это метод diff в Pandas. Однако это немного необычный подход и может быть не самым интуитивным. Я рассмотрю его для полноты, хотя позже предложу предпочтительный метод.

Чтобы сделать это более логичным, давайте добавим еще один столбец в наш датафрей.

# Загрузка примера DataFrame с использованием Pandas
import pandas as pd

df = pd.DataFrame.from_dict({
    'Sales January': [198, 123, 973, 761, 283, 839, 217, 666, 601, 992, 205],
    'Sales February': [951, 556, 171, 113, 797, 720, 570, 724, 153, 277, 932]
})

df = df.diff(axis=1)

print(df.head())

# Возвращает:
#    Sales January  Sales February
# 0            NaN             753
# 1            NaN             433
# 2            NaN            -802
# 3            NaN            -648
# 4            NaN             514

С этим подходом связаны некоторые нюансы:

  • Вы не можете комбинировать типы данных

  • В итоге у вас остается бесполезный столбец, содержащий только значения NaN

Вместо этого подхода, возможно, будет более разумно просто вычесть столбцы напрямую:

# Вычисление разности между столбцами
import pandas as pd

df = pd.DataFrame.from_dict({
    'Date': pd.date_range('2022-01-01', '2022-01-11'),
    'Sales January': [198, 123, 973, 761, 283, 839, 217, 666, 601, 992, 205],
    'Sales February': [951, 556, 171, 113, 797, 720, 570, 724, 153, 277, 932]
})

df['Sales Difference'] = df['Sales February'] - df['Sales January']

print(df.head())

# Возвращает:
#         Date  Sales January  Sales February  Sales Difference
# 0 2022-01-01            198             951               753
# 1 2022-01-02            123             556               433
# 2 2022-01-03            973             171              -802
# 3 2022-01-04            761             113              -648
# 4 2022-01-05            283             797               514

Этот подход является более интуитивным и понятным способом для вычисления разницы между столбцами

Различия между Pandas Diff и Pandas Shift

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

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

Построение ежедневных различий в Pandas и Matplotlib

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

Для этого мы импортируем matplotlib.pyplot как plt, который позволяет нам визуализировать данные. Мы также загрузим данные с сайта NOAA с некоторыми образцами данных.

Давайте посмотрим, как это работает

# Визуализация ежедневных различий с использованием Matplotlib
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('https://www1.ncdc.noaa.gov/pub/data/cdo/samples/NORMAL_DLY_sample_csv.csv', usecols=['DATE', 'DLY-TMAX-NORMAL'], parse_dates=['DATE'])

df['Temp Difference'] = df['DLY-TMAX-NORMAL'].diff(periods=7)

df.plot(x='DATE', y='Temp Difference', kind='line')
plt.show()

Это возвращает следующий граф

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

Заключение

В этом уроке вы узнали, как вычислить разницу между строками в DataFrame, используя метод diff в Pandas. Вы изучили, как изменить периодичность в ваших вычислениях и как назначать значения в новый столбец. Наконец, вы узнали, как вычислить разницу между столбцами в Pandas, а также более интуитивный метод для этого. В завершение вы научились использовать Pandas и matplotlib для визуализации периодических различий.

Чтобы узнать больше о методе Pandas diff, ознакомьтесь с официальной документацией здесь.

Похожие статьи

Чтобы узнать больше, ознакомьтесь со следующими статьями по теме:

  • 4 способа расчета кумулятивной суммы Pandas

  • Pandas Dataframe в CSV-файл – экспорт с использованием .to_csv()

  • Pandas: итерация по строкам Pandas Dataframe

  • Дисперсия Pandas: расчет дисперсии столбца Pandas Dataframe

Last updated