Ce face pd.qcut()
pd.qcut() alege singur limitele intervalelor astfel încât fiecare grupă să aibă aproximativ același număr de valori. Cu q=4 primești cuartile: cele mai mici 25% din valori, următoarele 25% și așa mai departe.
q poate fi și o listă de cuantile, de exemplu [0, 0.5, 0.9, 1] pentru „jumătatea de jos”, „până la 90%” și „primele 10%”. Cu labels dai nume grupelor; cu retbins=True primești și limitele calculate.
Dacă multe valori sunt egale, unele limite pot coincide și apare ValueError: Bin edges must be unique. Atunci folosește mai puține grupe sau duplicates="drop".
Parametri
| Parametru | Descriere |
|---|---|
x |
Valorile de împărțit: o listă sau o Series de numere. |
q |
Numărul de grupe (4 = cuartile) sau lista de cuantile între 0 și 1. |
labels |
Numele grupelor sau False pentru numere 0, 1, 2… |
retbins |
True: returnează și limitele intervalelor. |
duplicates |
"raise" (implicit) sau "drop" pentru limitele care se repetă. |
Ce returnează
O Series de tip category; cu retbins=True, un tuplu (categorii, limite).
Exemple
Exemplul 1: Cuartile pentru vânzările agenților
8 agenți împărțiți în 4 grupe: câte 2 în fiecare.
import pandas as pd
df = pd.DataFrame({"agent": ["Ana", "Mihai", "Elena", "Radu", "Ioana", "Dan", "Maria", "Vlad"],
"lei": [1200, 3400, 800, 2500, 4100, 1900, 3000, 1500]})
df["cuartila"] = pd.qcut(df["lei"], q=4, labels=["Q1", "Q2", "Q3", "Q4"])
print(df.sort_values("lei"))
print(df["cuartila"].value_counts(sort=False))
Rezultat
agent lei cuartila
2 Elena 800 Q1
0 Ana 1200 Q1
7 Vlad 1500 Q2
5 Dan 1900 Q2
3 Radu 2500 Q3
6 Maria 3000 Q3
1 Mihai 3400 Q4
4 Ioana 4100 Q4
cuartila
Q1 2
Q2 2
Q3 2
Q4 2
Name: count, dtype: int64
Exemplul 2: Cuantile alese și limitele calculate
import pandas as pd
punctaje = pd.Series([55, 62, 70, 71, 78, 80, 85, 88, 93, 99])
grupe, limite = pd.qcut(punctaje, q=[0, 0.5, 0.9, 1],
labels=["jumătatea de jos", "până la 90%", "primii 10%"], retbins=True)
print(limite)
print(grupe.value_counts(sort=False))
Rezultat
[55. 79. 93.6 99. ]
jumătatea de jos 5
până la 90% 4
primii 10% 1
Name: count, dtype: int64
Exemplul 3: Diferența față de pd.cut
Pe aceleași valori, cut face intervale de lungime egală (grupe inegale ca număr), iar qcut face grupe egale ca număr.
import pandas as pd
venituri = pd.Series([2000, 2200, 2500, 2600, 3000, 3200, 9000, 15000])
print(pd.cut(venituri, bins=4).value_counts(sort=False).tolist())
print(pd.qcut(venituri, q=4).value_counts(sort=False).tolist())
Rezultat
[6, 0, 1, 1]
[2, 2, 2, 2]
Greșeli frecvente
- Aplici
qcutpe o coloană cu multe valori egale și primeștiValueError: Bin edges must be unique. Foloseșteduplicates="drop"sau mai puține grupe. - Confunzi
qcu limitele:q=[0, 50, 100]nu înseamnă valori, ci cuantile, care trebuie să fie între 0 și 1. - Dai alt număr de etichete decât numărul de grupe; apare
ValueError.
Comenzi înrudite
pd.cut(): Împarte valori numerice în intervale stabilite de tine (de exemplu grupe de vârstă) și pune fiecărei valori eticheta intervalului.value_counts(): Numără de câte ori apare fiecare valoare într-o coloană (sau fiecare combinație de valori pe rânduri), în ordine descrescătoare.DataFrame.groupby(): Împarte tabelul în grupuri după una sau mai multe coloane, ca să calculezi totaluri, medii sau numărări pentru fiecare grup.
Întrebări & Exemple de Cod:
pd.qcut()Ai o nelămurire despre utilizarea comenzii
pd.qcut()sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.