0Pricing
Pandas & NumPy Academy · Ders

İndekse Göre Sıralama

Satırları sort_index() ile indeks etiketlerine göre yeniden sıralayın ve sıralanmış bir indeksin performansı ne zaman artırdığını öğrenin.

İndekse Göre Sıralama, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 2. 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.

DataFrame Dizinini Anlama

Her Pandas DataFrame'inin satırları tanımlamak ve bunlara erişmek için kullanılan bir satır dizini vardır. Varsayılan olarak bu, bir RangeIndex'tir (0, 1, 2, …); ancak set_index() kullanarak bunu herhangi bir sütuna (tarihler, adlar, kimlikler) ayarlayabilirsiniz. Dizin anlamlı olduğunda (örneğin bir DatetimeIndex veya müşteri kimliği olduğunda), sütun değerine göre değil de dizine göre sıralama mantıksal olarak düzenlenmiş bir çıktı oluşturur.

import pandas as pd

df = pd.DataFrame(
    {'value': [10, 20, 30]},
    index=['C', 'A', 'B']  # out-of-order alphabetic index
)
print(df)
#    value
# C     10
# A     20
# B     30

sort_index() — Artan Sıralama

DataFrame.sort_index(), satırları sütun değerleri yerine dizin etiketlerine göre yeniden sıralar. Varsayılan olarak sıralama artan düzendedir: dize dizinleri için alfabetik, tam sayı dizinleri için sayısal ve DatetimeIndex için kronolojik sıra kullanılır. Karıştırma veya kayıtları sıra dışı ekleme sonrasında bir veri kümesini doğal sırasına döndürmenin standart yolu budur.

import pandas as pd

df = pd.DataFrame(
    {'temp': [22.5, 19.0, 25.1, 18.3]},
    index=pd.to_datetime(['2024-03-01', '2024-01-15', '2024-06-10', '2024-01-01'])
)

sorted_df = df.sort_index()
print(sorted_df)
#             temp
# 2024-01-01  18.3
# 2024-01-15  19.0
# 2024-03-01  22.5
# 2024-06-10  25.1

sort_index() ile Azalan Sıralama

Dizini en büyükten (veya en yeniden) en küçüğe (veya en eskiye) sıralamak için ascending=False geçirin. DatetimeIndex için bu seçenek en güncel gözlemleri en üste getirir; bu da finansal verilerde, günlük dosyalarında ve en son olayın en ilgili olduğu olay akışlarında yaygın bir düzendir.

import pandas as pd

df = pd.DataFrame(
    {'price': [100, 110, 105, 115]},
    index=pd.to_datetime(['2024-01', '2024-02', '2024-03', '2024-04'])
)

# Most recent first
print(df.sort_index(ascending=False))
#             price
# 2024-04-30    115
# 2024-03-31    105
# 2024-02-29    110
# 2024-01-31    100

axis=1 ile Sütun Etiketlerini Sıralama

Varsayılan olarak sort_index(), satır dizinini (axis=0) sıralar. Bunun yerine sütun etiketlerini alfabetik olarak sıralamak için axis=1 geçirin. Bu, çok sayıda sütun içeren geniş DataFrame'leri standartlaştırmak için kullanışlıdır; sütunlar öngörülebilir bir alfabetik sırada görünür ve bir sütunu görsel olarak bulmak veya DataFrame'leri karşılaştırmak kolaylaşır.

import pandas as pd

df = pd.DataFrame({
    'zebra': [1], 'apple': [2], 'mango': [3], 'banana': [4]
})

print('Before:', df.columns.tolist())
# ['zebra', 'apple', 'mango', 'banana']

sorted_cols = df.sort_index(axis=1)
print('After:', sorted_cols.columns.tolist())
# ['apple', 'banana', 'mango', 'zebra']

Sıralanmış Dizin Ne Zaman Daha Hızlıdır?

Pandas, dizin sıralanmış (monotonik) olduğunda etiket aramalarında ikili aramayı kullanabilir. Sıralanmış bir dizin, .loc['2024-01':'2024-06'] dilimleme işlemini O(n) yerine O(log n) karmaşıklığıyla gerçekleştirir. is_monotonic_increasing (veya is_monotonic_decreasing) yöntemi, dizinin zaten sıralanmış olup olmadığını belirten bir doğru-yanlış değeri döndürür. Büyük bir dizini tekrar tekrar dilimlemeden önce sıralamak, bir kez ödenen ve karşılığını veren bir maliyettir.

import pandas as pd
import numpy as np

idx = pd.to_datetime(['2024-03-01', '2024-01-15', '2024-06-10'])
df = pd.DataFrame({'v': [1, 2, 3]}, index=idx)

print('Sorted?', df.index.is_monotonic_increasing)  # False

df = df.sort_index()
print('Sorted?', df.index.is_monotonic_increasing)  # True

# Now slicing is efficient
print(df.loc['2024-01':'2024-03'])

MultiIndex ile sort_index()

Bir DataFrame'de MultiIndex (hiyerarşik satır dizini) bulunduğunda sort_index(), varsayılan olarak hiyerarşinin tüm düzeylerini sıralar. level parametresiyle sıralamayı belirli düzeylerle sınırlandırabilirsiniz. .loc[(outer, inner), :] ile verimli hiyerarşik dilimleme yapılabilmesi için sıralanmış bir MultiIndex gereklidir.

import pandas as pd

arrays = [
    ['B', 'B', 'A', 'A'],
    ['two', 'one', 'two', 'one']
]
idx = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
df = pd.DataFrame({'value': [10, 20, 30, 40]}, index=idx)

print(df.sort_index())
#               value
# first second
# A     one       40
#       two       30
# B     one       20
#       two       10

MultiIndex'in Yalnızca Bir Düzeyini Sıralama

MultiIndex kullanırken, diğer düzeyin sırasını koruyarak yalnızca iç veya dış düzeye göre sıralama yapmak isteyebilirsiniz. sort_index() işlevine level= geçirin; bu parametre bir tam sayıyı (düzey konumu), bir dizeyi (düzey adı) veya bir listeyi kabul eder. Bu, dış düzeyin sırası zaten doğru olduğunda ve yalnızca her grup içinde sıralama yapmanız gerektiğinde kullanışlıdır.

import pandas as pd

df = pd.DataFrame({
    'sales': [300, 100, 200, 400, 150, 250]
}, index=pd.MultiIndex.from_tuples([
    ('Eng', 'Dave'), ('Eng', 'Alice'), ('Eng', 'Bob'),
    ('HR', 'Zoe'), ('HR', 'Carol'), ('HR', 'Eve')
], names=['dept', 'name']))

# Sort only the 'name' level alphabetically within each dept
print(df.sort_index(level='name'))
#              sales
# dept name
# Eng  Alice    100
#      Bob      200
#      Dave     300
# HR   Carol    150
#      Eve      250
#      Zoe      400

sort_index() ile sort_values() Arasındaki Fark

İki sıralama yöntemini birbirinden ayırmak önemlidir. sort_values(by='col'), satırları bir sütundaki veri değerlerine göre yeniden sıralar. sort_index() ise satırları, herhangi bir sütunla ilişkili olabilen veya olmayabilen satır etiketine (dizine) göre yeniden sıralar. Dizin birincil tanımlayıcı olduğunda (örneğin bir DatetimeIndex veya anlamlı bir dize anahtarı), doğru seçim sort_index() olur.

import pandas as pd

df = pd.DataFrame(
    {'value': [30, 10, 20]},
    index=['C', 'A', 'B']
)

# sort_index: sorted by row label A, B, C
print(df.sort_index())
#    value
# A     10
# B     20
# C     30

# sort_values: sorted by data value 10, 20, 30
print(df.sort_values('value'))
#    value
# A     10
# B     20
# C     30
# (same here because values happen to match alphabetical label order!)

İşlemlerden Sonra Özgün Sırayı Geri Yükleme

Bazı işlemler (karıştırma, df.sample(frac=1) ile rastgele örnekleme) satırların sırasını bozar. Özgün ardışık sırayı geri yüklemenin temiz yolu sort_index() kullanmaktır. Özgün sıra bir RangeIndex (0, 1, 2, …) ise sort_index() bunu geri yükler; anlamlı bir etiket kullanılmışsa o etiketin doğal sırasını geri getirir.

import pandas as pd

df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})

# Shuffle (random sample)
shuffled = df.sample(frac=1, random_state=42)
print('Shuffled index:', shuffled.index.tolist())
# e.g. [2, 4, 0, 1, 3]

# Restore original order by sorting the index
restored = shuffled.sort_index()
print('Restored index:', restored.index.tolist())
# [0, 1, 2, 3, 4]

na_position ile sort_index()

sort_values() gibi sort_index() de NaN dizin etiketlerinin nerede görüneceğini denetlemek için na_position parametresini destekler. Bu, bazı NaN etiketleri içeren bir dize veya tarih dizinine sahip DataFrame'lerde önemlidir (eksik dizin değerleri oluşturan işlemlerden sonra bu durum görülebilir). Varsayılan değer 'last' seçeneğidir.

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'v': [1, 2, 3, 4]},
    index=['B', None, 'A', 'C']
)

print(df.sort_index(na_position='last'))
#      v
# A    3
# B    1
# C    4
# NaN  2

Performans Kazancını Ölçme

Sıralanmış bir dizinin performans avantajını, sıralanmamış ve sıralanmış bir DatetimeIndex üzerinde yapılan dilimlemeyi Python'un timeit aracıyla karşılaştırarak deneysel olarak ölçebilirsiniz. Sıralanmış durumda ikili arama kullanılır ve büyük DataFrame'lerde genellikle 5-20 kat daha hızlıdır. Bu, sort_index() işleminin yalnızca görsel bir düzenleme olmadığını; çalışma süresi açısından gerçek sonuçları olduğunu gösterir.

import pandas as pd
import numpy as np

np.random.seed(0)
random_dates = pd.to_datetime(
    pd.Timestamp('2020-01-01').value + np.random.randint(0, 1_000_000_000_000_000, size=100_000),
    unit='ns'
)
df = pd.DataFrame({'val': np.random.randn(100_000)}, index=random_dates)

# Without sort: O(n) scan
import timeit
t1 = timeit.timeit(lambda: df.loc['2022-01':'2022-06'], number=100)

df_sorted = df.sort_index()
t2 = timeit.timeit(lambda: df_sorted.loc['2022-01':'2022-06'], number=100)

print(f'Unsorted: {t1:.3f}s, Sorted: {t2:.3f}s, Speedup: {t1/t2:.1f}x')

Hızlı Kontrol

Pandas'ta dizine göre sıralama konusundaki anlayışınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: sort_index() satırları sütun değerlerine göre değil, etiketlerine göre yeniden sıralar; axis=1 sütun etiketlerini alfabetik olarak sıralar ve sıralanmış bir dizin ikili aramayı etkinleştirerek zamana dayalı dilimlemeyi çok daha hızlı hâle getirir. MultiIndex içeren DataFrame'lerde level=, sıralamayı tek bir hiyerarşi düzeyiyle sınırlandırır. Verimli dilimleme aramalarına güvenmeden önce her zaman is_monotonic_increasing değerini kontrol edin. Sırada bir sütun içindeki değerleri sıralama var.

Sıkça Sorulan Sorular

“İndekse Göre Sıralama” dersi ücretsiz mi?

Evet — “İndekse Göre 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.

“İndekse Göre Sıralama” dersinde ne öğreneceğim?

Satırları sort_index() ile indeks etiketlerine göre yeniden sıralayın ve sıralanmış bir indeksin performansı ne zaman artırdığını öğrenin. 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 2. dersidir.

“İndekse Göre 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.

Bu kursun tüm dersleri

  1. Sütun Değerlerine Göre Sıralama
  2. İndekse Göre Sıralama
  3. Değerleri Sıralama
  4. İndeksi Ayarlama ve Sıfırlama
← Pandas & NumPy Academy Sayfasına Dön