【问题标题】:Groupby based on value in previous rowGroupby 基于上一行中的值
【发布时间】:2015-03-27 18:31:25
【问题描述】:

我有一列包含这样的值列表:

100
200
300
500
600
650
1000

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

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

100, 200, 300,

500, 600, 650

1000

这可以在 Pandas 中实现吗?由于 Pandas 尝试允许类似 SQL 的查询,我猜应该是这样。

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

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

    1. 使用shift 计算您要区分的行间标准。
    2. 使用cumsum 对这个标准求和,以创建一个新系列,其中每个组的单个值的单独“块”。
    3. 组这个新系列。

    这是一个例子:

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

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 2018-02-08
      • 1970-01-01
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多