如何在 Pandas 中按时间序列分组并聚合开始/停止时间

con*_*449 3 python pandas

我有一个 df 看起来像这样:

       data  start  stop
    10    1.0   1.5
    10    2.0   2.5
    10    3.0   3.5
    10    4.0   4.5
    10    5.0   5.5
    10    6.0   6.5
    10    7.0   7.5
    10    8.0   8.5
    14    9.0   9.5
    14   10.0  10.5
    10   11.0  11.5
    10   12.0  12.5
    10   13.0  13.5
    10   14.0  14.5
    14   15.0  15.5
    10   16.0  16.5
    10   17.0  17.5
    11   18.0  18.5
    11   19.0  19.5
    11   20.0  20.5
Run Code Online (Sandbox Code Playgroud)

我想通过 df.data 对 df 进行分组,并在列中聚合该组的 df.start 和 df.stop 时间。它应该是这样的:

    data  start  stop
    10    1.0   8.5
    14    9.0   10.5
    10   11.0   14.5
    14   15.0   15.5
    10   16.0   17.5
    11   18.0   20.5
Run Code Online (Sandbox Code Playgroud)

ALo*_*llz 5

您可以使用ne+ shift+cumsum通过连续的值组。然后为每一列选择合适的聚合。鉴于您的数据的顺序,您可以同样使用'first''last'分别聚合开始和停止。

d = {'data': 'first', 'start': 'min', 'stop': 'max'}   # How to aggregate
s = df.data.ne(df.data.shift(1)).cumsum().rename(None) # How to group

df.groupby(s).agg(d)
#   data  start  stop
#1    10    1.0   8.5
#2    14    9.0  10.5
#3    10   11.0  14.5
#4    14   15.0  15.5
#5    10   16.0  17.5
#6    11   18.0  20.5
Run Code Online (Sandbox Code Playgroud)

  • 看起来也可以使用 `'start':'first', 'stop':'last'` ,保存一些比较:-) (3认同)