Python 效率:检查数据帧中的值是否随特定阈值发生了更改
我有一个传感器记录的专栏Python 效率:检查数据帧中的值是否随特定阈值发生了更改,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个传感器记录的专栏 此数据有一些杂音,因此在未检测到任何内容的情况下,每个时间点的值并不完全相同。 我想将记录的数据帧拆分为只包含“有趣”数据的新数据帧(值大于列“B”的某个阈值,在本例中大于5)在本例中,“A”表示时间戳,“B”表示传感器数据,带有噪声。本例的预期结果是两个数据帧。一个具有从5到6的行,另一个具有从10到12的行数据帧上的正常循环非常耗时,因为数据帧有约2400万行。在熊猫或类似动物身上,有没有有效的方法来处理这样的问题 编辑: 例如: # | A | B -
此数据有一些杂音,因此在未检测到任何内容的情况下,每个时间点的值并不完全相同。
我想将记录的数据帧拆分为只包含“有趣”数据的新数据帧(值大于列“B”的某个阈值,在本例中大于5)
在本例中,“A”表示时间戳,“B”表示传感器数据,带有噪声。
本例的预期结果是两个数据帧。一个具有从5到6的行,另一个具有从10到12的行
数据帧上的正常循环非常耗时,因为数据帧有约2400万行。在熊猫或类似动物身上,有没有有效的方法来处理这样的问题 编辑: 例如:
# | A | B
--+-----+-----
1 | 1 | 0.10
2 | 2 | 0.11
3 | 3 | 0.09
4 | 4 | 0.12
5 | 5 | 5.24
6 | 6 | 6.33
7 | 7 | 0.08
8 | 8 | 0.09
9 | 9 | 0.10
10| 10 | 7.54
11| 11 | 8.33
12| 12 | 9.03
13| 13 | 0.43
下面是一个例子:
thresh = 5
s = df['B'].lt(thresh)
for k, v in (df.assign(c=s.cumsum())
.loc[~s]
.groupby('c')
):
print(v)
输出:
A B c
#
5 5 5.24 4
6 6 6.33 4
A B c
#
10 10 7.54 7
11 11 8.33 7
12 12 9.03 7
A B
#
5 5 5.24
6 6 6.33
A B
#
10 10 7.54
11 11 8.33
12 12 9.03
选项2:
for k, v in df.loc[~s].groupby(s.cumsum()):
print(v)
输出:
A B c
#
5 5 5.24 4
6 6 6.33 4
A B c
#
10 10 7.54 7
11 11 8.33 7
12 12 9.03 7
A B
#
5 5 5.24
6 6 6.33
A B
#
10 10 7.54
11 11 8.33
12 12 9.03
下面是一个例子:
thresh = 5
s = df['B'].lt(thresh)
for k, v in (df.assign(c=s.cumsum())
.loc[~s]
.groupby('c')
):
print(v)
输出:
A B c
#
5 5 5.24 4
6 6 6.33 4
A B c
#
10 10 7.54 7
11 11 8.33 7
12 12 9.03 7
A B
#
5 5 5.24
6 6 6.33
A B
#
10 10 7.54
11 11 8.33
12 12 9.03
选项2:
for k, v in df.loc[~s].groupby(s.cumsum()):
print(v)
输出:
A B c
#
5 5 5.24 4
6 6 6.33 4
A B c
#
10 10 7.54 7
11 11 8.33 7
12 12 9.03 7
A B
#
5 5 5.24
6 6 6.33
A B
#
10 10 7.54
11 11 8.33
12 12 9.03
请更准确地说明你想要的结果;在值大于5的连续行中分离数据名?或者数据帧,其中行“b”值介于5和7之间,另一个数据帧用于值介于7和10之间的行?@Chrisvdberge:我希望每次测量期间发生“操作”时都有单独的数据帧。所以传感器基本上被激活了。。。几分钟后(数千行),第一个操作发生约1分钟。在该“操作”期间,“B”的值可以得到任何值。动作结束后,再休息几分钟。比下一个动作发生约1min,比断、动作、断等。我希望每个动作都有单独的数据帧。下面答案的问题是,阈值也会过滤掉事件期间发生的阈值以下的值。。。我希望这个描述能让事情更清楚。谢谢你的关注@克瑞斯夫德伯格:我刚刚为这个问题提出了一个新问题:请更准确地说明你想要的结果;在值大于5的连续行中分离数据名?或者数据帧,其中行“b”值介于5和7之间,另一个数据帧用于值介于7和10之间的行?@Chrisvdberge:我希望每次测量期间发生“操作”时都有单独的数据帧。所以传感器基本上被激活了。。。几分钟后(数千行),第一个操作发生约1分钟。在该“操作”期间,“B”的值可以得到任何值。动作结束后,再休息几分钟。比下一个动作发生约1min,比断、动作、断等。我希望每个动作都有单独的数据帧。下面答案的问题是,阈值也会过滤掉事件期间发生的阈值以下的值。。。我希望这个描述能让事情更清楚。谢谢你的关注@克瑞斯夫德伯格:我刚刚为这个问题提出了一个新问题:谢谢你的快速回答!这完全解决了我提出的问题,非常好!然而,我发现我的问题表述错误。在“有趣的间隔”之间,可能会出现值再次降为零的情况,但由于“df2=df[df.B>thresh]”,这些值现在被删除。你有解决办法吗?谢谢:)PS:我编辑了原始示例我刚刚接受了你的答案,并将写一个新问题,因为你是对的:)谢谢!谢谢你的快速回答!这完全解决了我提出的问题,非常好!然而,我发现我的问题表述错误。在“有趣的间隔”之间,可能会出现值再次降为零的情况,但由于“df2=df[df.B>thresh]”,这些值现在被删除。你有解决办法吗?谢谢:)PS:我编辑了原始示例我刚刚接受了你的答案,并将写一个新问题,因为你是对的:)谢谢!