GG_Python
GG_Python

Reputation: 3541

Sorting two-dimensional dataframe using Pandas

I have a two-dimensional DataFrame, for simplicity it looks like:

df = pd.DataFrame([(1,2.2,5),(2,3,-1)], index=['row1', 'row2'], columns = ["col1","col2",'col3'])

with the output:

      col1  col2  col3
row1     1   2.2     5
row2     2   3.0    -1

What's the best way to order it by values to get:

RowName  ColName  Value
row2     col3      -1
row1     col1      1
row2     col1      2
row1     col2      2.2
row2     col2      3.0
row1     col3      5

I did try using .stack(), didn't get very far, constructing this using nested for loops is possible - but inelegant..

Any ideas here?

Upvotes: 2

Views: 212

Answers (2)

Keeth
Keeth

Reputation: 2100

stack() plus sort() appears to give the desired output

In [35]: df
Out[35]: 
      col1  col2  col3
row1     1   2.2     5
row2     2   3.0    -1

In [36]: stacked = df.stack()

In [38]: stacked.sort()

In [39]: stacked
Out[39]: 
row2  col3   -1.0
row1  col1    1.0
row2  col1    2.0
row1  col2    2.2
row2  col2    3.0
row1  col3    5.0

Upvotes: 1

Jeff
Jeff

Reputation: 128978

melt is a reverse unstack

In [6]: df
Out[6]: 
      col1  col2  col3
row1     1   2.2     5
row2     2   3.0    -1

In [7]: pd.melt(df.reset_index(),id_vars='index')
Out[7]: 
  index variable  value
0  row1     col1    1.0
1  row2     col1    2.0
2  row1     col2    2.2
3  row2     col2    3.0
4  row1     col3    5.0
5  row2     col3   -1.0

Upvotes: 3

Related Questions