Не знам за вас, но за мен функцията Groupby на Pandas е най-добрата досега!

Не знам за вас, но за мен функцията Groupby на Pandas е най-добрата досега!

За всеки, който работи с анализ на данни, съм сигурен, че „Groupby“ трябва да бъде в списъка ви с 5 най-използвани функции!

Но тъй като всеки покемон се развива, ще ви разкажа тук начина, по който използвам Groupby и как е изключително гъвкав.

Следвайте!

Ще използвам Olist Dataset от Kaggle с някои модификации и вече извърших сливането на базите данни.

Първо, нека импортираме Pandas и Numpy:

import pandas as pd
import numpy as np

Заредих своята рамка с данни и тя изглежда така, използвайки функцията Pandas info():

И така, да кажем, че искам да знам сумата от стойността на плащането до датата на покупка на поръчката, как мога да направя това?

Нека видим обичайния начин да го направите и неговия резултат:

df.groupby('order_purchase_timestamp')['payment_value'].sum().reset_index()

Хубаво, проработи, нали?

Но това е на дневна база, как мога да го правя всеки месец? Ще използваме pd.Grouper() function, както следва:

df.groupby(pd.Grouper(key = 'order_purchase_timestamp', freq = 'M'))['payment_value'].sum().reset_index()

Този ключ аргумент трябва да бъде колона за дата и час, а freq е честота от време, като месец (M), седмица (W), три месеца (3M), Година (Y) и така нататък...

Но с този код гледам само сумата на колона. Как мога да добавя множество мерки към множество колони?

Ще използваме функцията agg()!

Следвай ме!

Да кажем, че искам сумата от стойността на плащането и средната стойност на навлото за период от 2 месеца до датата на закупуване на поръчката:

df.groupby(pd.Grouper(key = 'order_purchase_timestamp', freq = '2M')).agg({'payment_value': 'sum', 'freight_value': 'mean'}).reset_index()

Функцията agg()използва речник като аргумент!

И мога ли да използвам повече от една мярка за всяка колона?

Да, можеш!

Нека добавим средната стойност на плащането в кода!

df.groupby(pd.Grouper(key = 'order_purchase_timestamp', freq = '2M')).agg({'payment_value': ['sum', 'mean'],'freight_value': 'mean'}).reset_index()

Това ще върне рамка с данни с множество индекси:

Не се тревожете! Лесно е да го решите! Ще използваме разбиране на списък!

weeks2.columns = ['_'.join(col) for col in weeks2.columns]

лесно?

Просто ми кажете какво мислите за това :)

.

.

.

Ако искате да научите повече, моля, разгледайте моите менторски сесии тук: https://mentorcruise.com/mentor/NathanLara/