[英]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.