如何才能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,7.0),(3.0,5.0),(3.0,5.0),(3.0,5.0),(5.0,7.0),.类别(3,intervalfloat64):(0.994,3.0 < (3.0,5.0)
即阵列的分离
Seq(1, 7, 5, 4, 6, 3)
放进垃圾箱,给出一张劈开的清单
Seq(3,5)
在scala中完成吗?
编辑
也许对熊猫文件的引用是有误导性的/不够清楚。我希望将指定的数组(假设整数)从以下位置分离为组(桶):
[b_1, b_2, ...b_n[
例如,在这种情况下,有两个桶状条件的情况下,接收n+1
组类似于:
Seq(("[0-3]", Seq(1,3)),("4-5", Seq(4,5)), ("is 6-[", Seq(7))
也就是说,给离散群分配一个连续的数字范围。
发布于 2018-09-30 06:48:01
你的问题有点含糊。熊猫cut
采用8个参数,其中大多数参数是可选的,具有缺省意义或值,其中一些参数可以接受不同的数据类型(例如,可以是Int
或Seq[Int]
的bins
)。我想你不是在找什么东西来模仿各种各样的行为。这可能比大多数居民愿意贡献的代码更多。
这里有一个简单的小问题,我认为,可以理解您在问题的编辑部分中描述的内容。
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)))
发布于 2018-09-29 22:01:18
也许不是你想要的,但你可以试着做一个groupBy
scala> val x=Seq(1,7,5,4,6,3).groupBy(_/3)
x: scala.collection.immutable.Map[Int,Seq[Int]] = Map(2 -> List(7, 6), 1 -> List(5, 4, 3), 0 -> List(1))
所以第一个回收站包含1
scala> x(0)
res6: Seq[Int] = List(1)
第二个bin包含5,4,3
scala> x(1)
res7: Seq[Int] = List(5, 4, 3)
最后一个回收站包含7,6
scala> x(2)
res8: Seq[Int] = List(7, 6)
如果您处理的是dataframe https://spark.apache.org/docs/latest/ml-features.html#quantilediscretizer上的列,则可以使用https://spark.apache.org/docs/latest/ml-features.html#quantilediscretizer
https://stackoverflow.com/questions/52572518
复制相似问题