I would like to sort the following dataframe:
Region LSE North South 0 Cn 33.330367 9.178917 1 Develd -36.157025 -27.669988 2 Wetnds -38.480206 -46.089908 3 Oands -47.986764 -32.324991 4 Otherg 323.209834 28.486310 5 Soys 34.936147 4.072872 6 Wht 0.983977 -14.972555
I would like to sort it so the LSE column is reordered based on the list:
lst = ['Oands','Wetnds','Develd','Cn','Soys','Otherg','Wht']
of, course the other columns will need to be reordered accordingly as well. Is there any way to do this in pandas?
Sorting Your DataFrame on a Single Column. To sort the DataFrame based on the values in a single column, you'll use . sort_values() . By default, this will return a new DataFrame sorted in ascending order.
You can sort by column values in pandas DataFrame using sort_values() method. To specify the order, you have to use ascending boolean property; False for descending and True for ascending. By default, it is set to True.
Sort the Series in Ascending Order By default, the pandas series sort_values() function sorts the series in ascending order. You can also use ascending=True param to explicitly specify to sort in ascending order. Also, if you have any NaN values in the Series, it sort by placing all NaN values at the end.
The improved support for Categorical
s in pandas version 0.15 allows you to do this easily:
df['LSE_cat'] = pd.Categorical( df['LSE'], categories=['Oands','Wetnds','Develd','Cn','Soys','Otherg','Wht'], ordered=True ) df.sort('LSE_cat') Out[5]: Region LSE North South LSE_cat 3 3 Oands -47.986764 -32.324991 Oands 2 2 Wetnds -38.480206 -46.089908 Wetnds 1 1 Develd -36.157025 -27.669988 Develd 0 0 Cn 33.330367 9.178917 Cn 5 5 Soys 34.936147 4.072872 Soys 4 4 Otherg 323.209834 28.486310 Otherg 6 6 Wht 0.983977 -14.972555 Wht
If this is only a temporary ordering then keeping the LSE column as a Categorical
may not be what you want, but if this ordering is something that you want to be able to make use of a few times in different contexts, Categoricals
are a great solution.
In later versions of pandas
, sort
, has been replaced with sort_values
, so you would need instead:
df.sort_values('LSE_cat')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With