Сортировка двумерных фреймов данных с помощью панд



У меня есть двумерный фрейм данных, для простоты он выглядит так:



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


С выходом:



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


Какой лучший способ упорядочить его по значениям, чтобы получить:



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


Я пробовал использовать .stack (), не очень далеко продвинулся, построение этого с использованием вложенных циклов for возможно - но неэлегантно..



Есть какие-нибудь идеи?

524   2  

2 ответов:

Расплав-это обратный расплав

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

Stack () плюс sort (), по-видимому, дают желаемый результат

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

Comments

    Ничего не найдено.