我有一个包含值列表的列,如下所示:
100
200
300
500
600
650
1000
我想做一个Groupby
(或类似的高效构造)来获取每行的值在最后一行的100
范围内的批量行。
在这种情况下,从上面的例子中产生的批次将是
100, 200, 300
,
500, 600, 650
1000
熊猫可以这样做吗?由于Pandas试图允许类似SQL的查询,我猜它应该是。
答案 0 :(得分:3)
您可以使用类似于this question答案中描述的方法。它基本上分为三个步骤:
shift
计算您要区分的行间标准。cumsum
对此标准求和,以创建具有单独"块"的新系列。每组的单一价值。以下是一个例子:
>>> x = pandas.Series([100, 200, 300, 500, 600, 650, 1000, 900, 750])
>>> x.groupby(((x - x.shift()).abs() > 100).cumsum()).apply(list)
0 [100, 200, 300]
1 [500, 600, 650]
2 [1000, 900]
3 [750]
dtype: object
请注意,我使用了标准> 100
,这与您提到的<= 100
标准相反。使用这种方法,您需要使用分隔组的标准,而不是加入它们的标准,因此您必须使用分组标准的否定。