Cập nhật chỉ mục sau khi sắp xếp data-frame


101

Lấy khung dữ liệu sau:

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

Tôi cần sắp xếp nó theo xthứ nhất và chỉ thứ hai theo 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

Làm cách nào tôi có thể thay đổi chỉ mục để nó tăng dần trở lại. Tức là làm cách nào để nhận được điều này:

   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

Tôi đã thử những điều sau đây. Thật không may, nó hoàn toàn không thay đổi chỉ mục:

df2.reindex(np.arange(len(df2.index)))

1
Nếu bạn không cần một df mới, hãy thửdf.sort(["x", "y"], ignore_index=True, inplace=True)
InnocentBystander

Câu trả lời:


174

Bạn có thể đặt lại chỉ mục bằng cách sử dụng reset_indexđể lấy lại chỉ mục mặc định 0, 1, 2, ..., n-1 (và sử dụng drop=Trueđể cho biết bạn muốn bỏ chỉ mục hiện có thay vì thêm nó dưới dạng cột bổ sung vào khung dữ liệu của bạn) :

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

Điều đó rất hữu ích. exp_data = exp_data.reindex (['year'], axis = 'column') giữ chỉ mục cũ. Drop loại bỏ chỉ mục cũ.
Golden Lion


9

Vì pandas 1.0.0 df.sort_valuescó một tham số mới ignore_indexthực hiện chính xác những gì bạn cần:

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

Tôi nghĩ rằng điều này là mới trong phiên bản 1.0.0.
zyy

5

Bạn có thể đặt các chỉ số mới bằng cách sử dụng set_index:

df2.set_index(np.arange(len(df2.index)))

Đầu ra:

   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

8
Điều này là không cần thiết, hãy sử dụng reset_index()thay thế
smci
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.