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
正在寻找用于在列布尔值之间对行进行分组的 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