我想将非零值分组在一起,其中一个组被定义为包含所有非零值的序列元素的子列表,由周围的0值元素分隔。例如:
values = [0, 0, 0, 1, 2, 3, 0, 0, 3, 3, 4, 3, 0, 0, 5]
... # do some splitting, grouping, black magic, etc.
values = [[1, 2, 3], [3, 3, 4, 3], [5]]
这个概念听起来有点像在PostgreSQL中使用窗口函数。我正试图找到一种高效/优雅的方法,用数据帧做同样的事情
我处理的是时态数据,因此生成的组还需要保持其原始顺序。例如,假设我有以下数据帧:
timestamp value
2018-01-01 0
2018-01-02 0
2018-01-03 1
2018-01-04 2
2018-01-05 3
2018-01-06 0
2018-01-07 0
2018-01-08 3
2018-01-09 0
2018-01-11 5
2018-01-12 5
2018-01-13 3
2018-01-14 0
2018-01-15 5
将其分为不同的组后,我希望每个组:
# Group 1
2018-01-03 1
2018-01-04 2
2018-01-05 3
# Group 2
2018-01-08 3
# Group 3
2018-01-11 5
2018-01-12 5
2018-01-13 3
# Group 4
2018-01-15 5
我见过类似的问题,在数据帧上使用各种方法(groupby()
、cumsum()
、rolling()
,等等),但没有任何方法符合我的确切需要。我找到了this bit of documentation
这似乎解决了这类问题,但结果却是空手而归。有人帮忙吗
使用
cumsum
创建组键(PS:I将结果保存到dict中,这样更容易获得值)更多信息
相关问题 更多 >
编程相关推荐