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
,它与