2013-06-21 82 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