2015-10-16 2 views
27

Возьмите следующие данные рамку:индекса Update после сортировки данных кадра

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))) 

ответ

38

Вы можете сбросить индекс с помощью reset_index, чтобы получить обратно индекс по умолчанию 1, 2, ..., п (и использовать drop=True, чтобы указать вы хотите отказаться от существующего индекса вместо добавления его в качестве колонки к вашему 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

вы можете установить новые индексы с помощью 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 
+3

Это не является необходимым, используйте 'reset_index()' вместо – smci

Смежные вопросы