dataframe - Krangl:计算列中包含在另一个列表中的元素数
问题描述
我正在使用 Krangl 库,因为我想做简单的探索性数据分析。我想计算来自其他数组的样本数。我有以下代码
val df: DataFrame = dataFrameOf(
"structure", "biome", "layer18")(
"mansion", "dark_forest", "ocean",
"mansion", "dark_forest", "dark_forest",
"mansion", "dark_forest_hills", "dark_forest",
"mansion", "dark_forest", "ocean",
"temple", "desert", "desert"
)
val sum = df.summarize(
"biome in dark forest" to {it["biome"].eq("dark_forest").count{ it } + it["biome"].eq("dark_forest_hills").count{ it }},
"layer18 dark forest or ocean" to {it["biome"].eq("dark_forest").count{ it } + it["biome"].eq("ocean").count{ it }}
)
println(df)
println(sum)
哪个输出
A DataFrame: 5 x 3
structure biome layer18
1 mansion dark_forest ocean
2 mansion dark_forest dark_forest
3 mansion dark_forest_hills dark_forest
4 mansion dark_forest plains
5 temple desert desert
A DataFrame: 1 x 2
biome in dark forest layer18 dark forest or ocean
1 4 3
但我不喜欢我需要为要检查的每个元素都有表达式。因为我要比较的值列表可以有可变大小。
在纯 kotlin 中,我会写
df["biome"].asStrings().map { it in listOf("dark_forest", "dark_forest_hills") }.map { if (it) 1 else 0 }.sum()
或者
df["biome"].asStrings().sumBy { if(it in listOf("dark_forest", "dark_forest_hills")) 1 else 0 }
但我想正确地、地道地使用 krangl 并跳出来和 krangl 似乎不正确。
另外,在熊猫中,我会做某事。喜欢df['biome'].isin(["dark_forest", "dark_forest_hills"]).sum()
,但我在 krangl 中找不到这样的功能。
我应该如何在 krangl 中做到这一点?
解决方案
这似乎有效:
df.filter { it["biome"].isMatching<String> { it as String in setOf("dark_forest", "dark_forest_hill") } }
推荐阅读
- git - 提交在本地 Git 中被删除
- javascript - 将 Passport Google 策略身份验证方法从路由移动到控制器中断
- angular - 以非声明方式添加 Angular html 代码
- node.js - 当我与之交互时,Puppeteer(Cluster)关闭页面
- python - 如何通过两个字段添加出现次数的列
- angular - 使用 httpClient 的 post 方法在 url 中传递参数
- javascript - 如何快速生成数万亿个随机 ID
- json - 当我在数据库中保存数据时,我得到的是 id 而不是属性
- java - 尽管调用了 Thread 的 run() 方法,为什么 Java 的 main 方法代码仍然执行?
- kendo-ui - 带有布尔值的剑道网格过滤器模式行