如何在允许一些杂散值的同时,基于阈值将一个数据帧拆分为多个数据帧?
例如
speed time
0 1 20
1 1 21
2 1 22
3 1 23
4 0 24
5 0 25
6 0 26
7 1 27
8 0 28
9 0 29
10 1 30
11 1 31
12 1 32
13 0 33
14 1 34
15 1 35
16 0 36
应(阈值为0.5)给出输出:
Interval1:
speed time
0 1 20
1 1 21
2 1 22
3 1 23
Interval2:
10 1 30
11 1 31
12 1 32
13 0 33
14 1 34
15 1 35
在这里,阈值之上或之下的三个值的运行被认为足以分割数据帧。
我在拆分数据帧时仔细研究了各种答案,但是所有这些答案都会拆分为阈值以下的第一个值,而不是找到阈值以下的x。
总体目标是将以下内容分为4个数据帧:
数据是来自gps的速度,我正在尝试将它们分组为间歇锻炼。
答案 0 :(得分:1)
使用具有适当阈值的centered rolling mean
。
threshold = 0.5
df["flag"] = df["speed"].rolling(3, center=True).mean().ffill().bfill() >= threshold
df["group"] = df["flag"].diff().cumsum().bfill().astype(int)
.bfill()
和.ffill()
分别填充前NaN
和后ls_out = []
for i in range(df["group"].max() + 1):
# depends on the flag of the first group
if (df["flag"][0] and (i % 2 == 0)) or ((not df["flag"][0]) and (i % 2 == 1)):
ls_out.append(df[df["group"] == i])
for out in ls_out:
print(out)
speed time flag group
0 1 20 True 0
1 1 21 True 0
2 1 22 True 0
3 1 23 True 0
speed time flag group
10 1 30 True 2
11 1 31 True 2
12 1 32 True 2
13 0 33 True 2
14 1 34 True 2
15 1 35 True 2
16 0 36 True 2
。
可以根据第一组是否低于阈值自动获得输出。
threshold=0.5
window=3
与{{1}}一起为这个特定的样本数据集工作只是一个巧合。在其他情况下,我建议选择适当的阈值以最好地包括组边界处的值,而不要坚持固定的阈值并执行手动环顾。