2015-10-16 14 views
27

podjąć następujące dane-Rama:Indeks Aktualizacja po sortowaniu danych ramę

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 

muszę rozwiązać to przez x najpierw, a dopiero drugi przez 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 

Jak zmienić indeks w taki sposób, aby ponownie wznosił się. To znaczy. jak mogę uzyskać to:

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 

Próbowałem następujące. Niestety, nie ma w ogóle zmienić indeks:

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

Odpowiedz

38

Można zresetować indeks używając reset_index wrócić indeks domyślną 1, 2, ..., n (i używać drop=True wskazać chcesz usunąć istniejący indeks zamiast dodawać je jako kolumny do dataframe):

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

można ustawić nowe indeksy za pomocą set_index:

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

wyjściowa:

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

To jest niepotrzebne, użyj 'reset_index() zamiast' – smci

Powiązane problemy