假设我在 DataFrame 中有一列已排序的时间戳。我想编写一个函数,向该 DataFrame 添加一列,根据以下规则将时间戳切割成连续的时间片:
- 从第一行开始并继续迭代到最后
- 对于每一行,如果您在当前组中走了 n 行,或者您在当前组中走了超过时间间隔 t,则进行剪切
- 返回一个新列,其中包含每行的组分配,该列应该是一个递增的整数
英文:每组不应超过 n 行,且跨度不应超过 t 时间
例如:(使用整数作为时间戳来简化)
INPUT
time
---------
1
2
3
5
10
100
2000
2001
2002
2003
OUTPUT(在 n = 3 和 t = 5 的切片函数之后)
time | group
----------|------
1 | 1
2 | 1
3 | 1
5 | 2 // cut because there were no cuts in the last 3 rows
10 | 2
100 | 3 // cut because 100 - 5 > 5
2000 | 4 // cut because 2000 - 100 > 5
2001 | 4
2002 | 4
2003 | 5 // cut because there were no cuts in the last 3 rows
我感觉这可以通过 Spark 中的窗口函数来完成。毕竟,创建窗口函数是为了帮助开发人员计算移动平均值。您基本上会计算 n 行的每个窗口的一列(股票价格)的合计(在本例中为平均值)。
在这里应该能够完成同样的事情。对于每一行,如果最后n行不包含cut,或者最后一次cut与当前时间戳之间的时间跨度大于t,cut = true, o.w. cut = false
。但我似乎无法弄清楚如何让窗口函数意识到自己。这就像知道最后一个移动平均线的特定行的移动平均线。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)