Groupby基于前一行的值

时间:2015-03-27 18:31:25

标签: python pandas group-by

我有一个包含值列表的列,如下所示:

100
200
300
500
600
650
1000

我想做一个Groupby(或类似的高效构造)来获取每行的值在最后一行的100范围内的批量行。

在这种情况下,从上面的例子中产生的批次将是

100, 200, 300

500, 600, 650

1000

熊猫可以这样做吗?由于Pandas试图允许类似SQL的查询,我猜它应该是。

1 个答案:

答案 0 :(得分:3)

您可以使用类似于this question答案中描述的方法。它基本上分为三个步骤:

  1. 使用shift计算您要区分的行间标准。
  2. 使用cumsum对此标准求和,以创建具有单独"块"的新系列。每组的单一价值。
  3. 这个新系列的小组。
  4. 以下是一个例子:

    >>> 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标准相反。使用这种方法,您需要使用分隔组的标准,而不是加入它们的标准,因此您必须使用分组标准的否定。