Cum să utilizați eficient Pandas GroupBy

Cum să utilizați eficient Pandas GroupBy

Nodul sursă: 1941381

Pandas este o bibliotecă open-source puternică și utilizată pe scară largă pentru manipularea și analiza datelor folosind Python. Una dintre caracteristicile sale cheie este capacitatea de a grupa date folosind funcția groupby prin împărțirea unui DataFrame în grupuri bazate pe una sau mai multe coloane și apoi aplicând diferite funcții de agregare fiecăruia dintre ele.

 

Cum să utilizați eficient Pandas GroupBy
Imagine de la Unsplash
 

groupby funcția este incredibil de puternică, deoarece vă permite să rezumați și să analizați rapid seturi de date mari. De exemplu, puteți grupa un set de date după o anumită coloană și puteți calcula media, suma sau numărul coloanelor rămase pentru fiecare grup. De asemenea, puteți grupa după mai multe coloane pentru a obține o înțelegere mai detaliată a datelor dvs. În plus, vă permite să aplicați funcții de agregare personalizate, care pot fi un instrument foarte puternic pentru sarcini complexe de analiză a datelor.

În acest tutorial, veți învăța cum să utilizați funcția groupby din Pandas pentru a grupa diferite tipuri de date și a efectua diferite operațiuni de agregare. Până la sfârșitul acestui tutorial, ar trebui să puteți utiliza această funcție pentru a analiza și a rezuma datele în diferite moduri.

Conceptele sunt interiorizate atunci când sunt practicate bine și aceasta este ceea ce vom face în continuare, adică să punem la punct funcția Pandas groupby. Se recomandă utilizarea a Jupiter Notebook pentru acest tutorial, deoarece puteți vedea rezultatul la fiecare pas.

Generați eșantion de date

Importați următoarele biblioteci:

  • Pandas: pentru a crea un cadru de date și a aplica gruparea după
  • Aleatoriu – Pentru a genera date aleatorii
  • Pprint – Pentru a tipări dicționare
import pandas as pd
import random
import pprint

 

În continuare, vom inițializa un cadru de date gol și vom completa valori pentru fiecare coloană, așa cum se arată mai jos:

df = pd.DataFrame()
names = [ "Sankepally", "Astitva", "Shagun", "SURAJ", "Amit", "RITAM", "Rishav", "Chandan", "Diganta", "Abhishek", "Arpit", "Salman", "Anup", "Santosh", "Richard",
] major = [ "Electrical Engineering", "Mechanical Engineering", "Electronic Engineering", "Computer Engineering", "Artificial Intelligence", "Biotechnology",
] yr_adm = random.sample(list(range(2018, 2023)) * 100, 15)
marks = random.sample(range(40, 101), 15)
num_add_sbj = random.sample(list(range(2)) * 100, 15) df["St_Name"] = names
df["Major"] = random.sample(major * 100, 15)
df["yr_adm"] = yr_adm
df["Marks"] = marks
df["num_add_sbj"] = num_add_sbj
df.head()

 

Sfat bonus – o modalitate mai curată de a face aceeași sarcină este prin crearea unui dicționar cu toate variabilele și valorile și ulterior convertirea acestuia într-un cadru de date.

student_dict = { "St_Name": [ "Sankepally", "Astitva", "Shagun", "SURAJ", "Amit", "RITAM", "Rishav", "Chandan", "Diganta", "Abhishek", "Arpit", "Salman", "Anup", "Santosh", "Richard", ], "Major": random.sample( [ "Electrical Engineering", "Mechanical Engineering", "Electronic Engineering", "Computer Engineering", "Artificial Intelligence", "Biotechnology", ] * 100, 15, ), "Year_adm": random.sample(list(range(2018, 2023)) * 100, 15), "Marks": random.sample(range(40, 101), 15), "num_add_sbj": random.sample(list(range(2)) * 100, 15),
}
df = pd.DataFrame(student_dict)
df.head()

 

Cadrul de date arată ca cel prezentat mai jos. Când rulați acest cod, unele dintre valori nu se vor potrivi deoarece folosim un eșantion aleatoriu.

 

Cum să utilizați eficient Pandas GroupBy

Realizarea Grupurilor

Să grupăm datele după subiectul „Major” și să aplicăm filtrul de grup pentru a vedea câte înregistrări se încadrează în acest grup.

groups = df.groupby('Major')
groups.get_group('Electrical Engineering')

 

Deci, patru studenți aparțin specializării Inginerie electrică.

 

Cum să utilizați eficient Pandas GroupBy
 

De asemenea, puteți grupa după mai multe coloane (Major și num_add_sbj în acest caz). 

groups = df.groupby(['Major', 'num_add_sbj'])

 

Rețineți că toate funcțiile agregate care pot fi aplicate grupurilor cu o singură coloană pot fi aplicate grupurilor cu mai multe coloane. Pentru restul tutorialului, să ne concentrăm asupra diferitelor tipuri de agregare folosind o singură coloană ca exemplu.

Să creăm grupuri folosind groupby în coloana „Major”.

groups = df.groupby('Major')

Aplicarea funcțiilor directe

Să presupunem că doriți să găsiți notele medii la fiecare Major. Ce ai face? 

  • Alegeți coloana Marks
  • Aplicați funcția medie
  • Aplicați funcția de rotunjire pentru a rotunji semnele la două zecimale (opțional)
groups['Marks'].mean().round(2)

 

Major
Artificial Intelligence 63.6
Computer Engineering 45.5
Electrical Engineering 71.0
Electronic Engineering 92.0
Mechanical Engineering 64.5
Name: Marks, dtype: float64

 

Agregat

O altă modalitate de a obține același rezultat este utilizarea unei funcții de agregare, așa cum se arată mai jos:

groups['Marks'].aggregate('mean').round(2)

 

De asemenea, puteți aplica mai multe agregări la grupuri, trecând funcțiile ca o listă de șiruri.

groups['Marks'].aggregate(['mean', 'median', 'std']).round(2)

 

Cum să utilizați eficient Pandas GroupBy
 

Dar ce se întâmplă dacă trebuie să aplicați o funcție diferită unei alte coloane. Nu vă faceți griji. Puteți face acest lucru și trecând perechea {coloană: funcție}.

groups.aggregate({'Year_adm': 'median', 'Marks': 'mean'})

 

Cum să utilizați eficient Pandas GroupBy

transformări

Este posibil să fie nevoie să efectuați transformări personalizate într-o anumită coloană, care pot fi realizate cu ușurință folosind groupby(). Să definim un scalar standard similar cu cel disponibil în modulul de preprocesare al lui sklearn. Puteți transforma toate coloanele apelând metoda transform și trecând funcția personalizată.

def standard_scalar(x): return (x - x.mean())/x.std()
groups.transform(standard_scalar)

 

Cum să utilizați eficient Pandas GroupBy
 

Rețineți că „NaN” reprezintă grupuri cu abatere standard zero.

Filtru

Poate doriți să verificați care „Major” are performanțe slabe, adică cel în care „Notele” medii ale elevilor sunt mai mici de 60. Este necesar să aplicați o metodă de filtrare pentru grupurile cu o funcție în interiorul acesteia. Codul de mai jos folosește a funcția lambda pentru a obține rezultatele filtrate.

groups.filter(lambda x: x['Marks'].mean() 60)

 

Cum să utilizați eficient Pandas GroupBy

First

Vă oferă prima sa instanță sortată după index.

groups.first()

 

Cum să utilizați eficient Pandas GroupBy

Descrie

Metoda „descrie” returnează statistici de bază, cum ar fi count, mean, std, min, max etc. pentru coloanele date.

groups['Marks'].describe()

 

Cum să utilizați eficient Pandas GroupBy

Mărimea

Dimensiunea, după cum sugerează și numele, returnează dimensiunea fiecărui grup în ceea ce privește numărul de înregistrări.

groups.size()

 

Major
Artificial Intelligence 5
Computer Engineering 2
Electrical Engineering 4
Electronic Engineering 2
Mechanical Engineering 2
dtype: int64

Contele și Nuique

„Count” returnează toate valorile, în timp ce „Nunique” returnează numai valorile unice din acel grup.

groups.count()

 

Cum să utilizați eficient Pandas GroupBy

 

groups.nunique()

 

Cum să utilizați eficient Pandas GroupBy

Redenumiți

De asemenea, puteți redenumi numele coloanelor agregate în funcție de preferințele dvs.

groups.aggregate("median").rename( columns={ "yr_adm": "median year of admission", "num_add_sbj": "median additional subject count", }
)

 

Cum să utilizați eficient Pandas GroupBy
 

  • Fiți clar cu privire la scopul grupării: Încercați să grupați datele pe o coloană pentru a obține media altei coloane? Sau încercați să grupați datele pe mai multe coloane pentru a obține numărul rândurilor din fiecare grup?
  • Înțelegeți indexarea cadrului de date: Funcția groupby folosește indexul pentru a grupa datele. Dacă doriți să grupați datele după o coloană, asigurați-vă că coloana este setată ca index sau puteți utiliza .set_index()
  • Utilizați funcția de agregare corespunzătoare: Poate fi folosit cu diverse funcții de agregare precum mean(), sum(), count(), min(), max()
  • Utilizați parametrul as_index: Când este setat la Fals, acest parametru le spune pandalor să folosească coloanele grupate ca coloane obișnuite în loc de index.

De asemenea, puteți utiliza groupby() împreună cu alte funcții Pandas, cum ar fi pivot_table(), crosstab() și cut() pentru a extrage mai multe informații din datele dvs.

O funcție de grupare este un instrument puternic pentru analiza și manipularea datelor, deoarece vă permite să grupați rânduri de date pe una sau mai multe coloane și apoi să efectuați calcule agregate pe grupuri. Tutorialul a demonstrat diverse moduri de utilizare a funcției groupby cu ajutorul exemplelor de cod. Sper că vă oferă o înțelegere a diferitelor opțiuni care vin cu acesta și, de asemenea, modul în care acestea ajută la analiza datelor.

 
 
Vidhi Chugh este un strateg AI și un lider în transformarea digitală care lucrează la intersecția dintre produs, științe și inginerie pentru a construi sisteme scalabile de învățare automată. Ea este un lider în inovare premiat, o autoare și un vorbitor internațional. Ea are misiunea de a democratiza învățarea automată și de a rupe jargonul pentru ca toată lumea să facă parte din această transformare.
 

Timestamp-ul:

Mai mult de la KDnuggets