Deedle - 如何通过切片选择行?

时间:2013-11-21 01:56:26

标签: f# 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

我想获得col [“two”]> = 5和col [“four”]< = 11的行。 这可以在python中使用pandas完成,例如:

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

如何使用Deedle在F#中执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用Frame.filterRows功能:

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

像pandas切片语法这样的东西会很好,但是我们还没有找到完全平滑的方法,所以使用filter函数是当前的方法(但好的是这与其他过滤操作 - 用于列表和序列。)

在这里,我使用的是row?two,它是从数据框中获取数值(浮点)值的简化表示法,但您可以将GetAs<T>("two")用于非数字类型的值。< / p>

仅供参考,这是我的样本数据集:

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"]