Sort pandas series by index

I have a Pandas framework called pd and I retrieve the number of unique values ​​in one of the columns of this data frame using the following command:

 b = df.groupby('Region').size() 

b is an object of the Pandas series and looks like this:

 In [48]: b Out[48]: Region 0 8 1 25 11 1 2 41 3 23 4 15 5 35 6 24 7 27 8 50 9 55 N 10 

I am trying to build a barchart of this series, however, I would like to sort it first based on the first column (because of this 11 between 1 and 2), which will be the x-axis labels. I tried passing the sort command, but sorts the series based on the values ​​in the second column:

 b.sort() In [48]: b Out[54]: Region 11 1 0 8 N 10 4 15 3 23 6 24 1 25 7 27 5 35 2 41 8 50 9 55 

Well, is there a way to sort this series based on the first column?

+6
source share
3 answers

You need to convert the index to the index of the object, because it currently sorts lexicographically and not numerically:

 In [97]: s = read_clipboard(header=None) In [98]: news = s.rename(columns=lambda x: ['Region', 'data'][x]) In [99]: news Out[99]: Region data 0 0 8 1 1 25 2 11 1 3 2 41 4 3 23 5 4 15 6 5 35 7 6 24 8 7 27 9 8 50 10 9 55 11 N 10 In [100]: news_converted = news.convert_objects(convert_numeric=True) In [101]: news_converted Out[101]: Region data 0 0 8 1 1 25 2 11 1 3 2 41 4 3 23 5 4 15 6 5 35 7 6 24 8 7 27 9 8 50 10 9 55 11 NaN 10 In [102]: news_converted.loc[11, 'Region'] = 'N' In [103]: news_converted_with_index = news_converted.set_index('Region') In [104]: news_converted_with_index Out[104]: data Region 0.0 8 1.0 25 11.0 1 2.0 41 3.0 23 4.0 15 5.0 35 6.0 24 7.0 27 8.0 50 9.0 55 N 10 In [105]: news_converted_with_index.sort_index() Out[105]: data Region 0.0 8 1.0 25 2.0 41 3.0 23 4.0 15 5.0 35 6.0 24 7.0 27 8.0 50 9.0 55 11.0 1 N 10 

Most likely, this is the best way to create your Series so that it doesn't mix index types.

+2
source

You are looking for sort_index :

 In [80]: b.sort_values() Out[80]: 6 1 11 2 9 2 1 4 10 4 2 5 3 6 4 7 8 8 5 9 dtype: int64 In [81]: b.sort_index() Out[81]: 1 4 2 5 3 6 4 7 5 9 6 1 8 8 9 2 10 4 11 2 dtype: int64 
+13
source

There is only 1 column of values. The first "column" is the index. Docs here

 In [8]: s = Series([3,2,1],index=[1,3,2]) In [9]: s Out[9]: 1 3 3 2 2 1 dtype: int64 

Index sorting

 In [10]: s.sort_index() Out[10]: 1 3 2 1 3 2 dtype: int64 

Sort by value

 In [11]: s.sort_values() Out[11]: 2 1 3 2 1 3 dtype: int64 
+8
source

Source: https://habr.com/ru/post/955127/


All Articles