我有一个 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.5Run 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.5Run Code Online (Sandbox Code Playgroud)
您可以使用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)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |