簡體   English   中英

Scala鞍式過濾列值

[英]Scala Saddle Filtering Column Values

我是Scala Saddle的新手,在一個框架中有三欄(客戶名稱,年齡和狀態)。 我必須在(年齡)欄中應用過濾器。 如果有18歲以上的任何客戶年齡,我需要將狀態設置為“合格”,否則,我需要將“顯着”設置為“合格”。

碼:

f.col("age").filterAt(x => x > 18)  //but how to update Status column

框架是不可變的容器,因此,最好使用完全初始化的值構建框架,而不是使用部分初始化的框架開始。

import org.saddle._

object Test {
  def main(args: Array[String]): Unit = {
    val names: Vec[Any] = Vec("andy", "bruce", "cheryl", "dino", "edgar", "frank", "gollum", "harvey")
    val ages:  Vec[Any] = Vec(4, 89, 7, 21, 14, 18, 23004, 65)

    def status(age: Any): Any = if (age.asInstanceOf[Int] >= 18) "eligible" else "noteligible"

    def mapper(indexAge: (Int, Any)): (Int, _) = indexAge match {
      case (index, age) => (index, status(age))
      }

    val nameAge:  Frame[Int, String, Any] = Frame("name" -> names, "age" -> ages)
    val ageCol:   Series[Int, Any]        = nameAge.colAt(1)
    val eligible: Series[Int, Any]        = ageCol.map( mapper )

    println("" + nameAge)
    println("" + eligible)

    val nameAgeStatus: Frame[Int, String, _] = nameAge.joinSPreserveColIx(eligible, how=index.LeftJoin, "status")

    println("" + nameAgeStatus)
  }
}

如果確實需要從部分初始化的框架開始,則始終可以刪除未初始化的列,並使用正確計算出的值將其重新添加回去。

盡管我更願意強力鍵入數據列,但我認為Frame僅包含一種類型的數據,“ Int”和“ String”的常見類型是“ Any”。 這也影響方法的類型簽名,盡管您可能希望內聯它們而不使用類型信息。

我發現查看scaladoc很有幫助

這是最后一個println調用的輸出:

[8 x 3]
       name   age      status 
     ------ ----- ----------- 
0 ->   andy     4 noteligible 
1 ->  bruce    89    eligible 
2 -> cheryl     7 noteligible 
3 ->   dino    21    eligible 
4 ->  edgar    14 noteligible 
5 ->  frank    18    eligible 
6 -> gollum 23004    eligible 
7 -> harvey    65    eligible 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM