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


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

Эта функция использует следующий синтаксис:

DataFrame.diff (периоды = 1, ось = 0)

куда:

  • периоды: количество предыдущих строк для расчета разницы.
  • ось: найти разницу в строках (0) или столбцах (1).

В следующих примерах показано, как использовать эту функцию на практике.

Пример 1: найти разницу между каждой предыдущей строкой

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'period': [1, 2, 3, 4, 5, 6, 7, 8],
 'sales': [12, 14, 15, 15, 18, 20, 19, 24],
 'returns': [2, 2, 3, 3, 5, 4, 4, 6]})

#view DataFrame
df

 period sales returns
0 1 12 2
1 2 14 2
2 3 15 3
3 4 15 3
4 5 18 5
5 6 20 4
6 7 19 4
7 8 24 6

Следующий код показывает, как найти разницу между каждой текущей строкой в DataFrame и предыдущей строкой:

#add new column to represent sales differences between each row
df['sales_diff'] = df['sales']. diff ()

#view DataFrame
df

 period sales returns sales_diff
0 1 12 2 NaN
1 2 14 2 2.0
2 3 15 3 1.0
3 4 15 3 0.0
4 5 18 5 3.0
5 6 20 4 2.0
6 7 19 4 -1.0
7 8 24 6 5.0

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

#add new column to represent sales differences between current row and 3 rows earlier
df['sales_diff'] = df['sales']. diff (periods= 3 )

#view DataFrame
df

 period sales returns sales_diff
0 1 12 2 NaN
1 2 14 2 NaN
2 3 15 3 NaN
3 4 15 3 3.0
4 5 18 5 4.0
5 6 20 4 5.0
6 7 19 4 4.0
7 8 24 6 6.0

Пример 2. Поиск разницы по условию

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

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

import pandas as pd

#create DataFrame
df = pd.DataFrame({'period': [1, 2, 3, 4, 5, 6, 7, 8],
 'sales': [12, 14, 15, 13, 18, 20, 19, 24],
 'returns': [2, 2, 3, 3, 5, 4, 4, 6]})

#find difference between each current row and the previous row
df['sales_diff'] = df['sales']. diff ()

#filter for rows where difference is less than zero
df = df[df['sales_diff']< 0 ]

#view DataFrame
df

 period sales returns sales_diff
3 4 13 3 -2.0
6 7 19 4 -1.0

Дополнительные ресурсы

Как найти уникальные значения в нескольких столбцах в Pandas
Как отфильтровать фрейм данных Pandas по значениям столбцов
Как выбрать строки по индексу в Pandas DataFrame

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.