Не знам за вас, но за мен функцията 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/