[翻译]  Update index after sorting data-frame

[CHINESE]  排序数据帧后更新索引


Take the following data-frame:

采取以下数据框架:

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

I need to sort it by x first, and only second by y:

我需要先按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

How can I change the index such that it is ascending again. I.e. how do I get this:

如何更改索引以使其再次升序。即我怎么得到这个:

   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 have tried the following. Unfortunately, it doesn't change the index at all:

我尝试了以下内容。不幸的是,它根本没有改变索引:

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

3 个解决方案

#1


59  

You can reset the index using reset_index to get back a default index of 1, 2, ..., n (and use drop=True to indicate you want to drop the existing index instead of adding it as a column to your dataframe):

您可以使用reset_index重置索引以获取默认索引1,2,...,n(并使用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

#2


2  

You can set new indices by using set_index:

您可以使用set_index设置新索引:

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

Output:

输出:

   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


1  

df.sort() is deprecated, use df.sort_values(...): https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html

不推荐使用df.sort(),使用df.sort_values(...):https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html

Then follow joris' answer by doing df.reset_index(drop=True)

然后通过执行df.reset_index(drop = True)来关注joris的回答


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2018 ITdaan.com 粤ICP备14056181号