2013-06-21 35 views
2

二维数据帧我有一个二维的数据帧,为了简单起见,它看起来像:排序使用熊猫

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循环是可能的 - 但不雅..

任何想法吗?

回答

3

熔体是反向拆散

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 
1

堆()加排序()出现,得到所需的输出

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 
+0

Keeth的建议也适用;评论以供将来参考给其他用户:df.stack()。sort()与Keeth的定义不同(即定义'堆积'然后排序它)。前者(这是我的问题)返回'None'。 –

+0

GG_Python我认为你的问题是,在这种情况下,df.stack()返回一个Series和[Series.sort()](http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series。 sort.html)是一个不带任何值的就地操作。 – Keeth