2015-10-16 6 views
27

Nehmen Sie die folgenden Daten-Rahmen:Update-Index nach dem Sortieren Datenrahmen

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 

Ich brauche es zu sortieren, indem x erste und einzige Sekunde von 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 

Wie kann ich den Index so ändern, dass er wieder aufsteigend ist. I.e. Wie bekomme ich das:

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 

Ich habe Folgendes versucht. Leider hat es nicht den Index überhaupt ändern:

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

Antwort

38

Sie können zurückgesetzt den Index reset_index unter Verwendung eines Standardindex von 1 zurück zu erhalten, 2, ..., n (und verwenden drop=True, um anzuzeigen, Sie wollen den vorhandenen Index anstelle der Zugabe es als eine Spalte zu Ihrem Datenrahmen fallen zu lassen):

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 
3

Sie neue Indizes mithilfe von set_index einstellen:

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

Ausgang:

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 
+3

Dies ist nicht notwendig, verwenden Sie 'reset_index()' statt – smci