Python 基于上一行中的值的Groupby

Python 基于上一行中的值的Groupby,python,pandas,group-by,Python,Pandas,Group By,我有一个列,列中列出了如下值: 100 200 300 500 600 650 1000 我想做一个Groupby(或类似的有效构造)来获得成批的行,其中每行的值都在最后一行的100范围内 在这种情况下,根据上述示例生产的批次将为 100200300 500600650 1000 这在熊猫身上可以做到吗?由于Pandas试图允许类似SQL的查询,我猜应该是这样的。您可以使用与的答案中描述的方法类似的方法。这基本上是一个三步过程: 使用shift计算要区分的行间标准 使用cumsum对该标准求和

我有一个列,列中列出了如下值:

100
200
300
500
600
650
1000
我想做一个
Groupby
(或类似的有效构造)来获得成批的行,其中每行的值都在最后一行的
100
范围内

在这种情况下,根据上述示例生产的批次将为

100200300

500600650

1000


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

您可以使用与的答案中描述的方法类似的方法。这基本上是一个三步过程:

  • 使用
    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
    ,这与
    相反,您可以使用与问题答案中所述类似的方法。这基本上是一个三步过程:

  • 使用
    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
    ,它与