I have a data frame that looks like this:

company Amazon Apple Yahoo name A 0 130 0 C 173 0 0 Z 0 0 150 

It was created using this code:

import pandas as pd df = pd.DataFrame({'name' : ['A', 'Z','C'], 'company' : ['Apple', 'Yahoo','Amazon'], 'height' : [130, 150,173]}) df = df.pivot(index="name", columns="company", values="height").fillna(0) 

What I want to do is to sort the row (with index name) according to a predefined list:

["Z", "C", "A"]` 

Resulting in this :

company Amazon Apple Yahoo name Z 0 0 150 C 173 0 0 A 0 130 0 

How can I achieve that?

0

2 Answers

You could set index on predefined order using reindex like

In [14]: df.reindex(["Z", "C", "A"]) Out[14]: company Amazon Apple Yahoo Z 0 0 150 C 173 0 0 A 0 130 0 

However, if it's alphabetical order, you could use sort_index(ascending=False)

In [12]: df.sort_index(ascending=False) Out[12]: company Amazon Apple Yahoo name Z 0 0 150 C 173 0 0 A 0 130 0 

Like pointed below, you need to assign it to some variable

In [13]: df = df.sort_index(ascending=False) 
4

We could also use loc:

lst = ["Z", "C", "A"] df = df.loc[lst] 

Output:

company Amazon Apple Yahoo name Z 0 0 150 C 173 0 0 A 0 130 0 

Note that if there are values in lst that does not exist in df.index (e.g. if lst=['Z','C','A','D']), then loc throws a KeyError (whereas reindex creates a new row 'D' full of NaNs).


MultiIndex

If df is MultiIndex, such as:

 C3 C1 C2 2 evelen 0 ten 1 twelve 2 1 evelen 3 ten 4 twelve 5 

and if you want to sort the second level by ten,eleven andtwelve, then using loc:

out = df.loc[:, ['ten','evelen', 'twelve'],:] 

Output:

 C3 C1 C2 2 evelen 0 ten 1 twelve 2 1 evelen 3 ten 4 twelve 5 

and for both levels:

out = df.loc[[1,2], ['ten','evelen','twelve'], :] 

Output:

 C3 C1 C2 1 ten 4 evelen 3 twelve 5 2 ten 1 evelen 0 twelve 2 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy