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