首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Deedle帧中简单的基于关键字的查找

Deedle帧中简单的基于关键字的查找
EN

Stack Overflow用户
提问于 2016-08-23 06:30:15
回答 2查看 139关注 0票数 1

假设我们有如下数据:

代码语言:javascript
复制
name        age   eats
bugs bunny  20    carrots
elmer fudd  50    wabbits

下面的Pandas示例的Deedle等价物是什么?

代码语言:javascript
复制
>>> df[df["name"] == "bugs bunny"]["eats"]
0    carrots
Name: eats, dtype: object

代码语言:javascript
复制
>>> df[df["eats"] == "carrots"]["name"]
0    bugs bunny
Name: name, dtype: object

如果有另一种更多的F-sharpy方法来做这些类型的查找(例如使用记录),那也是非常有用的。

谢谢。

使用记录进行编辑我猜如下所示:

代码语言:javascript
复制
type PersonRec = {name : string; age : int ; eats : string}
let rec1 = { name = "bugs bunny"; age = 20; eats = "carrots" }
let rec2 = { name = "elmer fudd"; age = 50; eats = "wabbits" }

let bugsbunnyeats =
    [rec1; rec2] 
    |> List.filter (function
                        | {name = "bugs bunny"}   -> true
                        | _                       -> false
                    )
bugsbunnyeats.Head.eats

但如果可能的话,我仍然希望看到使用Deedle进行同样的操作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-23 07:50:26

Deedle具有行和列键的概念-这使得基于键执行查找非常容易,但对于基于其他列/行的查找,您将需要使用过滤。

给定您的示例数据:

代码语言:javascript
复制
let df = 
  frame [ 
    "age" =?> series [ "bugs bunny" => 20; "elmer fudd" => 50 ]
    "eats" =?> series [ "bugs bunny" => "carrots"; "elmer fudd" => "wabbits" ] ]

这将创建一个框架:

代码语言:javascript
复制
              age eats    
bugs bunny -> 20  carrots 
elmer fudd -> 50  wabbits 

现在,您可以使用各种查找:

代码语言:javascript
复制
// Lookup using column & row keys
df.["eats", "bugs bunny"]

// Lookup using row key
df.Rows.["bugs bunny"].GetAs<int>("age")
df.Rows.["bugs bunny"]?age // for numbers

// Lookup using filtering
let carrotEaters = 
  df.Rows
  |> Series.filter (fun k row -> row.GetAs("eats") = "carrots")

carrotEaters.FirstKey() // bugs bunny
carrotEaters.FirstValue().GetAs<int>("age") // 20
票数 4
EN

Stack Overflow用户

发布于 2016-08-23 08:53:48

一旦你说到查找,等价的数据结构就变成了映射/字典。然后你可以做一个地图的地图,或者在这种情况下保持简单,记录的地图。当然,Deedle将对其中的大部分内容进行抽象,但以下是一张地图:

代码语言:javascript
复制
type PersonRec = {Name : string; Age : int ; Eats : string}
let rec1 = { Name = "bugs bunny"; Age = 20; Eats = "carrots" }
let rec2 = { Name = "elmer fudd"; Age = 50; Eats = "wabbits" }
let recs = [rec1;rec2]
type subRec = {Age: int; Eats:string}

创建一个简单的地图:

代码语言:javascript
复制
let m1 = Map.empty<string,(int * string)>
let m1 = recs |> List.map ( fun x -> (x.Name,{subRec.Age=x.Age;subRec.Eats = x.Eats})) 
              |> Map.ofList

m1.["bugs bunny"].Eats 
//val it : string = "carrots"`

谁会吃胡萝卜呢?

代码语言:javascript
复制
m1 |> Seq.filter (fun (KeyValue (k,v))-> v.Eats ="carrots") 
   |> Seq.map (fun x -> x.Key)
//val it : seq<string> = seq ["bugs bunny"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39089682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档