อัปเดตดัชนีหลังจากจัดเรียง data-frame


102

ใช้กรอบข้อมูลต่อไปนี้:

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

ฉันต้องจัดเรียงตามลำดับxแรกและอันดับสองโดย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

ฉันจะเปลี่ยนดัชนีให้มันขึ้นอีกครั้งได้อย่างไร ฉันจะได้รับสิ่งนี้อย่างไร:

   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

ฉันได้ลองสิ่งต่อไปนี้แล้ว น่าเสียดายที่มันไม่ได้เปลี่ยนดัชนีเลย:

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

1
หากคุณไม่ต้องการ df ใหม่ลองdf.sort(["x", "y"], ignore_index=True, inplace=True)
InnocentBystander

คำตอบ:


175

คุณสามารถรีเซ็ตดัชนีโดยใช้reset_indexเพื่อกลับดัชนีเริ่มต้นเป็น 0, 1, 2, ... , n-1 (และใช้drop=Trueเพื่อระบุว่าคุณต้องการทิ้งดัชนีที่มีอยู่แทนที่จะเพิ่มเป็นคอลัมน์เพิ่มเติมในดาต้าเฟรมของคุณ) :

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

นั่นเป็นประโยชน์มาก exp_data = exp_data.reindex (['year'], axis = 'คอลัมน์') เก็บดัชนีเก่า ดร็อปจะลบดัชนีเก่า
Golden Lion


10

เนื่องจาก pandas 1.0.0 df.sort_valuesมีพารามิเตอร์ใหม่ignore_indexที่ตอบสนองสิ่งที่คุณต้องการ:

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

ฉันคิดว่านี่เป็นเวอร์ชันใหม่ในเวอร์ชัน 1.0.0
zyy

5

คุณสามารถตั้งค่าดัชนีใหม่ได้โดยใช้set_index:

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

เอาท์พุต:

   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
สิ่งนี้ไม่จำเป็นให้ใช้reset_index()แทน
smci
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.