Pandas & NumPy Academy · Pelajaran

Mengurutkan Berdasarkan Indeks

Susun ulang baris berdasarkan label indeksnya dengan sort_index() dan pahami kapan indeks yang terurut dapat meningkatkan kinerja.

Pelajaran 2 dari 413 langkah

Mengurutkan Berdasarkan Indeks adalah pelajaran Pandas & NumPy Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Pandas & NumPy Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Memahami Indeks DataFrame

Setiap DataFrame Pandas memiliki indeks baris — sekumpulan label yang digunakan untuk mengidentifikasi dan mengakses baris. Secara default, indeks ini berupa RangeIndex (0, 1, 2, …), tetapi Anda dapat mengaturnya ke kolom apa pun (tanggal, nama, ID) menggunakan set_index(). Ketika indeks memiliki makna (misalnya, DatetimeIndex atau ID pelanggan), mengurutkan berdasarkan indeks tersebut, bukan berdasarkan nilai kolom, menghasilkan keluaran yang tersusun secara logis.

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() — Menaik

DataFrame.sort_index() menyusun ulang baris berdasarkan label indeks, bukan berdasarkan nilai kolom. Secara default, pengurutan dilakukan secara menaik — secara alfabetis untuk indeks string, secara numerik untuk indeks bilangan bulat, dan secara kronologis untuk DatetimeIndex. Ini adalah cara standar untuk mengembalikan kumpulan data ke urutan alaminya setelah pengacakan atau penambahan catatan yang tidak berurutan.

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() Menurun

Gunakan ascending=False untuk mengurutkan indeks dari yang terbesar (atau terbaru) ke yang terkecil (atau terlama). Untuk DatetimeIndex, cara ini menempatkan pengamatan terbaru di bagian atas, yang merupakan tata letak umum untuk data keuangan, file log, dan aliran peristiwa ketika peristiwa terbaru paling relevan.

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

Mengurutkan Label Kolom dengan axis=1

Secara default, sort_index() mengurutkan indeks baris (axis=0). Gunakan axis=1 untuk mengurutkan label kolom secara alfabetis. Hal ini berguna untuk menyeragamkan DataFrames lebar dengan banyak kolom, sehingga kolom muncul dalam urutan alfabetis yang dapat diprediksi dan lebih mudah ditemukan secara visual atau dibandingkan antar-DataFrame.

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']

Kapan Indeks Terurut Lebih Cepat?

Pandas dapat menggunakan pencarian biner untuk pencarian label ketika indeks terurut (monoton). Indeks terurut membuat irisan .loc['2024-01':'2024-06'] berkompleksitas O(log n), bukan O(n). Metode is_monotonic_increasing (atau is_monotonic_decreasing) mengembalikan boolean yang menunjukkan apakah indeks sudah terurut. Mengurutkan indeks besar sebelum melakukan pengirisan berulang kali merupakan biaya satu kali yang sepadan.

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'])

sort_index() dengan MultiIndex

Ketika DataFrame memiliki MultiIndex (indeks baris hierarkis), sort_index() secara default mengurutkan semua tingkat dalam hierarki. Anda dapat membatasi pengurutan pada tingkat tertentu dengan parameter level. MultiIndex yang terurut diperlukan untuk pengirisan hierarkis yang efisien dengan .loc[(outer, inner), :].

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

Mengurutkan Satu Tingkat MultiIndex Saja

Dengan MultiIndex, Anda mungkin ingin mengurutkan hanya tingkat dalam atau tingkat luar sambil mempertahankan urutan tingkat lainnya. Gunakan level= pada sort_index() — parameter ini menerima bilangan bulat (posisi tingkat), string (nama tingkat), atau daftar. Hal ini berguna ketika urutan tingkat luar sudah benar dan Anda hanya perlu mengurutkan data di dalam setiap kelompok.

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

Perbedaan antara sort_index() dan sort_values()

Penting untuk membedakan kedua metode pengurutan tersebut. sort_values(by='col') mengurutkan ulang baris berdasarkan nilai data dalam suatu kolom. sort_index() mengurutkan ulang baris berdasarkan label baris (indeks), yang mungkin berkaitan dengan suatu kolom atau mungkin tidak. Jika indeks merupakan pengenal utama (misalnya DatetimeIndex atau kunci string yang bermakna), sort_index() adalah pilihan yang tepat.

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!)

Mengembalikan Urutan Asli Setelah Operasi

Beberapa operasi (pengacakan, pengambilan sampel acak dengan df.sample(frac=1)) mengubah urutan baris secara acak. sort_index() adalah cara yang rapi untuk mengembalikan urutan sekuensial asli. Jika urutan awal menggunakan RangeIndex (0, 1, 2, …), sort_index() akan mengembalikannya; jika menggunakan label yang bermakna, metode ini mengembalikan urutan alami label tersebut.

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]

sort_index() dengan na_position

Seperti sort_values(), sort_index() juga mendukung na_position untuk mengatur posisi kemunculan label indeks NaN. Hal ini penting ketika sebuah DataFrame memiliki indeks string atau tanggal yang berisi beberapa label NaN (yang dapat muncul setelah operasi yang menghasilkan nilai indeks yang hilang). Nilai bawaannya adalah 'last'.

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

Mengukur Peningkatan Kinerja

Anda dapat mengukur manfaat kinerja indeks yang terurut secara empiris dengan menggunakan timeit dari Python untuk membandingkan pemotongan pada DatetimeIndex yang tidak terurut dan yang terurut. Kasus yang terurut menggunakan pencarian biner dan biasanya 5–20 kali lebih cepat untuk DataFrame berukuran besar. Hal ini menunjukkan bahwa sort_index() bukan sekadar operasi kosmetik — metode ini benar-benar berdampak pada waktu eksekusi.

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')

Pemeriksaan Singkat

Uji pemahaman Anda tentang pengurutan berdasarkan indeks di Pandas.

Ringkasan Pelajaran

Dalam pelajaran ini, Anda mempelajari bahwa sort_index() mengurutkan ulang baris berdasarkan labelnya (bukan nilai kolom), axis=1 mengurutkan label kolom berdasarkan abjad, dan indeks yang terurut memungkinkan pencarian biner sehingga pemotongan berbasis waktu menjadi jauh lebih cepat. Untuk DataFrame MultiIndex, level= membatasi pengurutan pada satu tingkat hierarki. Selalu periksa is_monotonic_increasing sebelum mengandalkan pencarian pemotongan yang efisien. Selanjutnya, kita akan mengurutkan nilai dalam suatu kolom berdasarkan peringkat.

Gratis untuk memulai

Belajar Python dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengurutkan Berdasarkan Indeks” gratis?

Ya — teks lengkap “Mengurutkan Berdasarkan Indeks” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Pandas & NumPy Academy, upgrade ke CoddyKit PRO. Kursus Pandas & NumPy Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengurutkan Berdasarkan Indeks”?

Susun ulang baris berdasarkan label indeksnya dengan sort_index() dan pahami kapan indeks yang terurut dapat meningkatkan kinerja. Kamu berlatih Pandas & NumPy Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Pandas & NumPy Academy?

Tidak diperlukan pengalaman sebelumnya. Pandas & NumPy Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Mengurutkan Berdasarkan Indeks” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Pandas & NumPy Academy ini?

Ya. Setiap pelajaran Pandas & NumPy Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengurutkan Berdasarkan Nilai Kolom
  2. Mengurutkan Berdasarkan Indeks
  3. Memberi Peringkat pada Nilai
  4. Menetapkan dan Mengatur Ulang Indeks
← Kembali ke Pandas & NumPy Academy