python - python pandas在scala中切割
问题描述
怎么能pd.cut
(给定一些拆分的数组桶),
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.cut.html
>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3) ... [(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], ... Categories (3, interval[float64]): [(0.994, 3.0] < (3.0, 5.0] ...
即一个Array的分离
Seq(1, 7, 5, 4, 6, 3)
放入箱中,给定拆分列表
Seq(3,5)
在scala中完成?
编辑
也许对熊猫文档的引用具有误导性/不够清楚。我想将指定的数组(假设整数)分成组(桶):
[b_1, b_2, ...b_n[
即在这种情况下,具有 2 个分桶条件的接收n+1
组类似于:
Seq(("[0-3]", Seq(1,3)),("4-5", Seq(4,5)), ("is 6-[", Seq(7))
即将连续的数字范围分配给离散的组。
解决方案
你的问题有点含糊。Pandascut
有八个参数,其中大部分是可选的,具有默认含义或值,其中一些可以接受不同的数据类型(例如bins
可以是Int
或Seq[Int]
)。我假设您不是在寻找模仿所有各种行为的东西。这可能比大多数 SO 居民愿意贡献的代码更多。
我认为,这是一个简单的小东西,可以理解您在问题的编辑部分中描述的内容。
def pdCut(x :Seq[Int], bins :Seq[Int]) :Seq[(String,Seq[Int])] = {
val bs = bins.sorted.foldRight(Seq(("@",Seq(Int.MaxValue)))){case (b,v) =>
val (str,sq) = v.head
(s"$b", Seq(b)) +: (s"$b-$str", b +: sq) +: v.tail
}
val (str,sq) = bs.head
val xs = (s"@-$str", Int.MinValue +: sq) +: bs.tail
x.map(n => xs.find(_._2(1) >= n).get)
}
如果负数不是问题,您可以替换Int.MinValue
为。0
用法:
pdCut(Seq(3,6,4,1,9,5), Seq(3,5))
//res0: Seq[(String, Seq[Int])] = Seq((@-3,Seq(-2147483648, 3)), (5-@,Seq(5, 2147483647)), (3-5,Seq(3, 5)), (@-3,Seq(-2147483648, 3)), (5-@,Seq(5, 2147483647)), (3-5,Seq(3, 5)))
推荐阅读
- single-sign-on - Ping Federate 抛出错误:cvc-complex-type.2.4c:验证 SAML 响应时
- android - 反应原生,在模拟器或设备上调试?
- java - Java删除数组中的冗余项
- dart - 如何让 AppBar 图标触发渲染?
- mysql - 为什么 sum 不计算期望值?
- react-native - 平面列表未在状态更改时更新
- c# - C# 将客户端重新连接到服务器
- amazon-s3 - 无法删除孤立的 AWS s3 存储桶
- javascript - 我们如何在 Electron 中将消息主进程发送到渲染器进程
- python - 如何使用python在nextion上发送数据