Метод tail класса GroupBy
Метод tail применяется к объекту GroupBy
и возвращает последние строки для каждой группы.
Первым параметром можно передать количество строк,
которое нужно вернуть из каждой группы.
Если параметр не указан, возвращаются 5 строк из каждой группы.
Метод полезен, когда нужно получить последние записи
в разрезе групп, например, последние заказы каждого клиента
или последние измерения для каждого датчика.
Синтаксис
groupby_object.tail([n])
Пример
Пусть у нас есть данные о продажах по разным городам.
Давайте сгруппируем данные по городу и получим последние 2
строки для каждой группы:
import pandas as pd
df = pd.DataFrame({
'city': ['A', 'B', 'A', 'B', 'A', 'B'],
'sales': [100, 200, 150, 250, 300, 400]
})
grouped = df.groupby('city')
res = grouped.tail(2)
print(res)
Результат выполнения кода:
city sales
2 A 150
3 B 250
4 A 300
5 B 400
Пример
Теперь давайте получим последнюю строку из каждой группы,
передав параметр 1:
import pandas as pd
df = pd.DataFrame({
'city': ['A', 'B', 'A', 'B', 'A', 'B'],
'sales': [100, 200, 150, 250, 300, 400]
})
grouped = df.groupby('city')
res = grouped.tail(1)
print(res)
Результат выполнения кода:
city sales
4 A 300
5 B 400
Пример
Если не передавать параметр, метод вернёт последние 5
строк из каждой группы. Давайте проверим это на данных
с большим количеством строк:
import pandas as pd
df = pd.DataFrame({
'group': ['X', 'X', 'X', 'Y', 'Y', 'Y', 'Z', 'Z'],
'value': [1, 2, 3, 4, 5, 6, 7, 8]
})
grouped = df.groupby('group')
res = grouped.tail()
print(res)
Результат выполнения кода:
group value
1 X 2
2 X 3
4 Y 5
5 Y 6
7 Z 8
Обратите внимание: так как в группе 'X' всего 3 строки, в неё попали все строки, а из группы 'Z' вернулась только последняя строка, так как в ней было только 2 строки.
Пример
Метод tail можно комбинировать с другими методами.
Например, отсортируем данные внутри каждой группы по
убыванию и возьмём последние записи:
import pandas as pd
df = pd.DataFrame({
'product': ['apple', 'banana', 'apple', 'banana', 'apple'],
'date': ['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'],
'price': [10, 20, 15, 25, 12]
})
df['date'] = pd.to_datetime(df['date'])
grouped = df.groupby('product')
sorted_grouped = grouped.apply(lambda x: x.sort_values('date', ascending=False))
res = sorted_grouped.tail(1)
print(res)
Результат выполнения кода:
product date price
0 product
apple 0 apple 2024-01-01 10
banana 1 banana 2024-01-02 20