Pandas groupby 布尔列值之间的所有行

Pandas groupby all rows between boolean column values

正在寻找用于在列布尔值之间对行进行分组的 Pandas 语法。

数据表

distance time new
0 2020-10-11 1:30:15 true
5 2020-10-11 1:31:15 false
10 2020-10-11 1:32:15 false
1 2020-10-11 2:30:15 true
2 2020-10-11 2:31:15 false
30 2020-10-11 2:32:15 false
31 2020-10-11 2:33:15 false
0 2020-10-12 1:31:15 true
5 2020-10-12 1:32:15 false

问题

希望对属于每个 activity 的所有行进行分组。新的 activity 由新列中的真值确定。根据以上数据,应该有 3 组。每个组都需要从第一行开始,并在下一个 True 之前以最后一个 False 结束。 使用 groupby 如何实现?

代码

这是使用 groupby 并按日期分组的功能,但正如我上面所说,我希望将其更改为按“新”列组行分组到活动中。不过,我打算在这样的 for 循环中使用。

for idx, day in df.groupby(df.timestamp.dt.date):
    print(idx)
    print(day)

只需按 df['new'].cumsum():

分组
for idx, day in df.groupby(df['new'].cumsum()):
    print('-----')
    print(idx)
    print(day)

输出:

-----
1
   distance                time    new
0         0  2020-10-11+1:30:15   True
1         5  2020-10-11+1:31:15  False
2        10  2020-10-11+1:32:15  False
-----
2
   distance                time    new
3         1  2020-10-11+2:30:15   True
4         2  2020-10-11+2:31:15  False
5        30  2020-10-11+2:32:15  False
6        31  2020-10-11+2:33:15  False
-----
3
   distance                time    new
7         0  2020-10-12+1:31:15   True
8         5  2020-10-12+1:32:15  False