2014-10-31 72 views
1

幀的堆棧功能可以把這樣逆透視一個deedle數據幀

 cola colb  colc  
1 -> 10 <missing> aaa  
3 -> 20 5.5  bb   
5 -> 30 <missing> <missing> 
6 -> 40 <missing> ccc 

的數據幀INTO

 Row Column Value 
0 -> 1 cola 10  
1 -> 1 colc aaa 
2 -> 3 cola 20  
3 -> 3 colb 5.5 
4 -> 3 colc bb  
5 -> 5 cola 30  
6 -> 6 cola 40  
7 -> 6 colc ccc 

然而通常使用的列值中的一個在需要和其它列的作爲新列的連接鍵,同時執行unpivot。我怎麼能實現類似的結果:

0 -> 10 colb <missing>  
1 -> 10 colc aaa 
2 -> 20 colb 5.5  
3 -> 20 colc bb 
4 -> 30 colb <missing>  
5 -> 30 colc <missing>   
6 -> 40 colb <missing>    
7 -> 40 colc ccc 

原來可樂的價值和COLB和COLC列標題已經成爲一個組合鍵指向COLB價值和COLC價值。

我如何用Deedle實現這一目標?

回答

1

我不認爲我們有任何內置函數在Deedle自動做到這一點,但你可以做到這一點通過循環幀的行,然後遍歷列:

假設f是從你的問題的示例輸入框架,下面應該做的伎倆:

[ for r in f.Rows.Values do 
    for c in r.Keys do 
     if c <> "cola" then 
     yield r.Get("cola"), c, r.TryGet(c) ] 
|> Frame.ofRecords 
+0

太好了,謝謝。如果colb和colc的類型是雙重的(缺失值),並且我希望新的未轉義值字段也是雙重類型。我不需要使用tupule來創建新的數據框,我需要創建一個新的記錄類型,其未轉義的值域是雙重類型。這種方法是否正確(或最佳方法)?我正在使用數據框來創建datatable,然後批量插入到sql server中,因此我需要有double作爲數據框列類型。 – casbby 2014-10-31 23:13:29