Python 如何按时间序列分组并聚合pandas中的开始/停止时间

Python 如何按时间序列分组并聚合pandas中的开始/停止时间,python,pandas,Python,Pandas,我有一个df,看起来像这样: 数据开始停止 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

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

数据开始停止
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
您可以使用
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

看起来人们也可以使用
'start':'first','stop':'last'
,保存一些比较:-)df.groupby((df.data!=df.data.shift()).cumsum()).agg({'data':'first','start':'first','stop':'last'})。set_index('data')也可以使用