2013-11-21 53 views
0

我想根據多行的值比較來選擇一些行。Deedle - 如何通過切片選擇行?

說數據幀(DF)是這樣的:

one two three four 
a 0 1 2 3 
b 4 5 6 7 
c 8 9 10 11 
d 12 13 14 15 

我想要得到的行,其中欄[ 「2」]> = 5和col [ 「四」] < = 11。 這可以在Python中簡單地完成與像熊貓:

df[(df["two"]>=5 & df["four"]<=11] 

我怎樣才能做到這一點在F#與Deedle?

謝謝!

回答

2

可以使用Frame.filterRows功能:

df |> Frame.filterRows (fun k row -> 
    row?two >= 5.0 && row?four <= 11.0) 

有類似大熊貓切片語法將是很好的,但我們還沒有發現這樣做還沒有完全順暢的方式,因此使用過濾功能是當前路做這件事(但好處是這與其他過濾器操作一致 - 用於列表和序列)。

在這裏,我使用row?two這是從數據幀獲得數字(浮點)值簡化的符號,但是你可以使用GetAs<T>("two")非數值類型的值。

只是一個參考,這裏是我的樣本數據集:

let df = 
    Frame.ofRows 
    [ 'a' => Series.ofValues [ 0;1;2;3] 
     'b' => Series.ofValues [ 4;5;6;7] 
     'c' => Series.ofValues [ 8;9;10;11] 
     'd' => Series.ofValues [ 12;13;14;15] ] 
    |> Frame.indexColsWith ["one"; "two"; "three"; "four"] 
+0

感謝托馬斯!這太酷了:) –