Değerleri Sıralama
Sütun değerlerine rank() ile sıra numaraları atayın, eşit değerleri ayırma yöntemlerini seçin ve pd.cut() ile yüzdelik dilim kutuları oluşturun.
Değerleri Sıralama, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Sıralama Nedir?
Sıralama, bir Series içindeki her değere göreli büyüklüğüne dayalı bir konum verir: en küçük değer için 1. sıra, en büyük değer için n. sıra (veya bunun tersi). Satırların sırasını değiştiren sıralama işleminden farklı olarak rank(), özgün verilerin yanına sıra konumlarını içeren yeni bir sütun ekler. Sıralamalar liderlik tablolarında, yüzdelik hesaplamalarında ve mutlak değerler yerine sıra konumu gerektiren bazı istatistiksel testlerde kullanılır.
import pandas as pd
df = pd.DataFrame({
'player': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve'],
'score': [88, 72, 95, 72, 85]
})
df['rank'] = df['score'].rank()
print(df)
# player score rank
# 0 Alice 88 4.0
# 1 Bob 72 1.5 <- tied with Dave
# 2 Carol 95 5.0
# 3 Dave 72 1.5 <- tied with Bob
# 4 Eve 85 3.0Artan ve Azalan Sıralama
Varsayılan olarak rank(), en küçük değere 1. sıra verir (artan sıralama). En büyük değere 1. sırayı vermek için (örneğin bir yarışmada birincilik) ascending=False parametresini geçirin. Bu, sporda, sıralama tablolarında ve satış sıralamalarında kullanılan “birincilik = en yüksek puan” kuralıyla uyumludur.
import pandas as pd
df = pd.DataFrame({'score': [70, 95, 85, 60, 90]})
# Rank 1 = highest score
df['competition_rank'] = df['score'].rank(ascending=False)
print(df)
# score competition_rank
# 0 70 4.0
# 1 95 1.0
# 2 85 3.0
# 3 60 5.0
# 4 90 2.0Eşitlikleri Ayırma Yöntemleri
Birden fazla satır aynı değere sahip olduğunda (eşitlik), sıralamaların nasıl atanacağını method parametresi belirler. Seçenekler şunlardır: 'average' (varsayılan — eşit satırlar ortalama sırayı paylaşır), 'min' (tüm eşit satırlar en düşük sırayı alır), 'max' (tümü en yüksek sırayı alır), 'first' (ilk görünen satır daha düşük sırayı alır) ve 'dense' (eşitlikten sonra sıra numaralarında boşluk bırakılmaz).
import pandas as pd
s = pd.Series([10, 20, 20, 30])
print('average:', s.rank(method='average').tolist()) # [1.0, 2.5, 2.5, 4.0]
print('min: ', s.rank(method='min').tolist()) # [1.0, 2.0, 2.0, 4.0]
print('max: ', s.rank(method='max').tolist()) # [1.0, 3.0, 3.0, 4.0]
print('first: ', s.rank(method='first').tolist()) # [1.0, 2.0, 3.0, 4.0]
print('dense: ', s.rank(method='dense').tolist()) # [1.0, 2.0, 2.0, 3.0]Yoğun Sıralama: Eşitliklerden Sonra Boşluk Yok
'dense' yöntemi, boşluksuz bir sıralama istediğinizde özellikle kullanışlıdır. 'min' ile ikinci sırayı paylaşan iki giriş, sonraki sırayı 4 yapar (3 atlanır). 'dense' ile sonraki sıra her zaman 3 olur ve kesintisiz bir dizi korunur. Yoğun sıralama, SQL'deki DENSE_RANK() pencere işlevinde kullanılan standart yöntemdir ve sıralama tablolarında yaygın olarak kullanılır.
import pandas as pd
df = pd.DataFrame({
'name': ['A', 'B', 'C', 'D', 'E'],
'score': [100, 80, 80, 60, 60]
})
df['dense_rank'] = df['score'].rank(method='dense', ascending=False).astype(int)
print(df)
# name score dense_rank
# 0 A 100 1
# 1 B 80 2
# 2 C 80 2 <- same score, same rank
# 3 D 60 3 <- next rank is 3, not 4
# 4 E 60 3pct=True ile Yüzdelik Sıralama
rank() içinde pct=True ayarlandığında sıralamalar [0, 1] aralığına normalleştirilir ve bir yüzdelik sıralama elde edilir. Yüzdelik sıralaması 0.8 olan bir değer, sütundaki değerlerin %80'inden daha yüksektir. Bu yöntem finansta (yüzdelik performans), notlandırmada (puan yüzdelikleri) ve aykırı değer tespitinde kullanılır.
import pandas as pd
df = pd.DataFrame({'score': [50, 70, 80, 90, 100]})
df['percentile'] = df['score'].rank(pct=True)
print(df)
# score percentile
# 0 50 0.2
# 1 70 0.4
# 2 80 0.6
# 3 90 0.8
# 4 100 1.0Gruplar İçinde Sıralama
Sıralamaları her grup içinde bağımsız olarak (örneğin her departmandaki maaş sıralamasını) hesaplamak için groupby() ile rank() işlevlerini birleştirin. Sıralama işlevini grup grup uygulayan ve özgün DataFrame diziniyle hizalanmış bir Series döndüren groupby().rank() ifadesini kullanın. Bu, gruba göre sıralama sütunu eklemek için idealdir.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'Eng', 'HR', 'HR', 'Eng'],
'name': ['Alice', 'Bob', 'Carol', 'Dave', 'Eve'],
'salary': [90000, 70000, 55000, 65000, 80000]
})
df['dept_rank'] = df.groupby('dept')['salary'].rank(
method='dense', ascending=False
).astype(int)
print(df.sort_values(['dept', 'dept_rank']))
# dept name salary dept_rank
# 0 Eng Alice 90000 1
# 4 Eng Eve 80000 2
# 1 Eng Bob 70000 3
# 3 HR Dave 65000 1
# 2 HR Carol 55000 2Eşit Genişlikte Bölmeler için pd.cut()
pd.cut(series, bins), sürekli bir sayısal sütunu eşit genişlikte aralıklara (bölmelere) ayırır ve her değeri kendi bölmesine atar. Bu işlem, sürekli bir değişkeni kategorik bir değişkene dönüştürür; histogramlar, yaş grupları, gelir aralıkları veya herhangi bir ayrıklaştırma görevi için kullanışlıdır. Sonuç, aralık etiketlerine sahip bir Categorical Series olur.
import pandas as pd
df = pd.DataFrame({'age': [5, 15, 25, 35, 45, 55, 65, 75]})
df['age_group'] = pd.cut(df['age'], bins=[0, 18, 35, 60, 100],
labels=['Child', 'Young Adult', 'Middle Age', 'Senior'])
print(df)
# age age_group
# 0 5 Child
# 1 15 Child
# 2 25 Young Adult
# 3 35 Young Adult
# 4 45 Middle Age
# 5 55 Middle Age
# 6 65 Senior
# 7 75 SeniorEşit Frekanslı Bölmeler için pd.qcut()
pd.qcut(series, q), değerleri kantillere dayalı bölmelere ayırır; her bölme yaklaşık olarak aynı sayıda gözlem içerir. pd.cut() işlevinden (eşit genişlik) farklı olarak pd.qcut() eşit büyüklükte gruplar oluşturur. Bu özellik, desil puanları, beşlik dilimlere ayırma veya çeyreklik grupları gibi yüzdelik tabanlı segmentasyonlar için kullanışlıdır.
import pandas as pd
import numpy as np
np.random.seed(0)
df = pd.DataFrame({'score': np.random.randint(40, 100, 20)})
# Split into 4 equal-frequency quartiles
df['quartile'] = pd.qcut(df['score'], q=4, labels=['Q1', 'Q2', 'Q3', 'Q4'])
print(df['quartile'].value_counts().sort_index())
# Q1 5
# Q2 5
# Q3 5
# Q4 5cut() ve qcut() — Temel Farklar
Bölmelerinizin alan içinde doğal bir anlamı olduğunda (örneğin 0-18, 18-35, 35-60 yaş aralıkları) pd.cut() kullanın; bu durumda bölme genişlikleri anlamsal açıdan önemlidir. Sınırların nerede olduğundan bağımsız olarak eşit grup büyüklükleri istediğinizde pd.qcut() kullanın; örneğin müşterileri üst ve alt çeyrekliklere ayırmak için. Çarpık bir dağılım, cut() ile çok farklı büyüklükte gruplar, qcut() ile ise eşit gruplar oluşturur.
import pandas as pd
import numpy as np
np.random.seed(0)
# Skewed distribution: most values near 0
skewed = pd.Series(np.random.exponential(scale=5, size=100).round())
# cut with equal width: many empty or tiny upper bins
cut_counts = pd.cut(skewed, bins=4).value_counts().sort_index()
print('cut():', cut_counts.values)
# qcut with equal frequency: always 25 per group
qcut_counts = pd.qcut(skewed, q=4).value_counts().sort_index()
print('qcut():', qcut_counts.values)Sıra Numarasını Sütun Olarak Ekleme
Sıralanmış bir çıktı tablosu oluşturmak için temiz bir yaklaşım şudur: azalan biçimde sıralayın, dizini 0'dan başlayacak şekilde sıfırlayın, insan tarafından okunabilir 1 tabanlı sıralama için 1 ekleyin ve bunu özgün verilerin yanında gösterin. Böylece boşluk içermeyen, düzenli sıra numaralarına sahip ve sunuma hazır bir sıralama tablosu elde edilir.
import pandas as pd
df = pd.DataFrame({
'team': ['Falcons', 'Eagles', 'Hawks', 'Owls'],
'wins': [12, 9, 12, 7]
})
leaderboard = (
df
.sort_values('wins', ascending=False)
.reset_index(drop=True)
)
leaderboard.index = leaderboard.index + 1
leaderboard.index.name = 'place'
print(leaderboard)Makine Öğrenmesi için Özellik Olarak Sıralama
Sıralamaya dönüştürülmüş özellikler, aykırı değerlere dayanıklı oldukları için makine öğrenmesinde kullanışlıdır. Çok büyük veya çok küçük bir değer, özellik dağılımını çarpıtmak yerine uçlara yakın bir sıra alır. Sıralama dönüşümü bazen ağaç tabanlı modellerden önce bir ön işleme adımı olarak veya sayısal ölçeğin anlamlı olmadığı, ancak göreli sıralamanın önemli olduğu durumlarda kullanılır.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'income': [30000, 50000, 70000, 1_000_000] # outlier at 1M
})
# Add rank as a feature
df['income_rank'] = df['income'].rank(pct=True)
print(df)
# income income_rank
# 0 30000 0.25
# 1 50000 0.50
# 2 70000 0.75
# 3 1000000 1.00
# The outlier has rank 1.0 — extreme but not disproportionateKısa Kontrol
Pandas'te değerleri sıralama konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: rank() değerlere sıra konumları atar, method='dense' eşitliklerden sonra boşlukları önler, pct=True [0,1] aralığında yüzdelik sıralamalar verir ve groupby().rank() grup içi sıralamaları hesaplar. Sürekli değişkenleri ayrıklaştırırken eşit genişlikte bölmeler için pd.cut(), eşit frekanslı bölmeler için pd.qcut() kullanın. Sırada DataFrame dizinini ayarlama ve sıfırlama var.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Değerleri Sıralama” dersi ücretsiz mi?
Evet — “Değerleri Sıralama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“Değerleri Sıralama” dersinde ne öğreneceğim?
Sütun değerlerine rank() ile sıra numaraları atayın, eşit değerleri ayırma yöntemlerini seçin ve pd.cut() ile yüzdelik dilim kutuları oluşturun. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Değerleri Sıralama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.