Ambil bingkai data berikut:
x = np.tile(np.arange(3),3)
y = np.repeat(np.arange(3),3)
df = pd.DataFrame({"x": x, "y": y})
x y
0 0 0
1 1 0
2 2 0
3 0 1
4 1 1
5 2 1
6 0 2
7 1 2
8 2 2
Saya perlu mengurutkan berdasarkan x
pertama, dan kedua dengan y
:
df2 = df.sort(["x", "y"])
x y
0 0 0
3 0 1
6 0 2
1 1 0
4 1 1
7 1 2
2 2 0
5 2 1
8 2 2
Bagaimana saya bisa mengubah indeks sehingga naik lagi. Yaitu bagaimana cara mendapatkan ini:
x y
0 0 0
1 0 1
2 0 2
3 1 0
4 1 1
5 1 2
6 2 0
7 2 1
8 2 2
Saya telah mencoba yang berikut ini. Sayangnya, itu tidak mengubah indeks sama sekali:
df2.reindex(np.arange(len(df2.index)))
df.sort(["x", "y"], ignore_index=True, inplace=True)
Jawaban:
Anda dapat mengatur ulang indeks menggunakan
reset_index
untuk mendapatkan kembali indeks default 0, 1, 2, ..., n-1 (dan digunakandrop=True
untuk menunjukkan Anda ingin menghapus indeks yang ada alih-alih menambahkannya sebagai kolom tambahan ke kerangka data Anda) :In [19]: df2 = df2.reset_index(drop=True) In [20]: df2 Out[20]: x y 0 0 0 1 0 1 2 0 2 3 1 0 4 1 1 5 1 2 6 2 0 7 2 1 8 2 2
sumber
df.sort()
tidak digunakan lagi, gunakandf.sort_values(...)
: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.htmlKemudian ikuti jawaban joris dengan melakukan
df.reset_index(drop=True)
sumber
Karena pandas 1.0.0
df.sort_values
memiliki parameter baruignore_index
yang melakukan apa yang Anda butuhkan:In [1]: df2 = df.sort_values(by=['x','y'],ignore_index=True) In [2]: df2 Out[2]: x y 0 0 0 1 0 1 2 0 2 3 1 0 4 1 1 5 1 2 6 2 0 7 2 1 8 2 2
sumber
Anda dapat mengatur indeks baru dengan menggunakan
set_index
:df2.set_index(np.arange(len(df2.index)))
Keluaran:
x y 0 0 0 1 0 1 2 0 2 3 1 0 4 1 1 5 1 2 6 2 0 7 2 1 8 2 2
sumber
reset_index()
saja