2017-06-28 67 views
0

下面是一个与我的类似的示例数据框,但我正在使用的数据框有200,000个数据点。过滤稳定速度条件下的熊猫数据框

import pandas as pd 
import numpy as np 

df=pd.DataFrame([ 
     [10.07,5], [10.24,5], [12.85,5], [11.85,5], 
     [11.10,5], [14.56,5], [14.43,5], [14.85,5], 
     [14.95,5], [10.41,5], [15.20,5], [15.47,5], 
     [15.40,5], [15.31,5], [15.43,5], [15.65,5] 
    ], columns=['speed','delta_t']) 
df 

    speed delta_t 
0 10.07  5 
1 10.24  5 
2 12.85  5 
3 11.85  5 
4 11.10  5 
5 14.56  5 
6 14.43  5 
7 14.85  5 
8 14.95  5 
9 10.41  5 
10 15.20  5 
11 15.47  5 
12 15.40  5 
13 15.31  5 
14 15.43  5 
15 15.65  5 

std_dev = df.iloc[0:3,0].std() # this will give 1.55 
print(std_dev) 

我有2列, '速度' 和 'Delta_T'。 Delta_T是我实际数据(它有日期和时间)中后续行之间的时间差。运行速度不断变化,我想要实现的是过滤出速度几乎稳定的所有数据点,例如通过筛选标准偏差< 0.5和Delta_T> = 15分钟。例如,如果我们从第一个速度开始,那么代码应该能够继续跳到下一个速度,继续计算标准偏差,如果它小于0.5,并且delta_T总和达到30分钟,我应该复制数据转换成新的数据帧。 因此,对于这个数据框,我将留下索引5到8和10到15。

这可能吗?你能给我一些关于如何做的建议吗?对不起,我卡住了。这对我来说似乎很复杂。

谢谢。

此致阿伦

+0

你能张贴设置你想要的数据? – MaxU

+0

谢谢。它看起来像这样。 DF1 = pd.DataFrame([[14.56,5],[14.43,5],[14.85,5],[14.95,5],[15.2,5],[15.47,5],[15.4,5],[ 15.31,5],[15.43,5],[15.65,5],列= [ '速度', 'delta_t'])。我只是从原始数据创建另一个数据框来获得我想要的。理想情况下,代码应该创建一个基于std和时间标准 –

回答

0

设使用rollingshiftstd

计算为3的窗口的滚动的std中,发现小于0.5的那些性病和使用移位(-2),以获得std小于0.5的窗口开始处的值。使用布尔索引|(或)我们可以得到整个稳态范围。

df_std = df['speed'].rolling(3).std() 
df_ss = df[(df_std < 0.5) | (df_std < 0.5).shift(-2)] 
df_ss 

输出:

speed delta_t 
5 14.56  5 
6 14.43  5 
7 14.85  5 
8 14.95  5 
10 15.20  5 
11 15.47  5 
12 15.40  5 
13 15.31  5 
14 15.43  5 
15 15.65  5 
+0

嗨。非常感谢您的回复。这对我给你的数据有用。但是如果我需要在超过20分钟的时间内完成这项工作,那么它会不对?我尝试了滚动4并改变班次,但它不起作用。我希望能够改变Delta T标准。 –

+0

我不明白为什么不。让我们用不同的数据集进行测试。 4滚动和移位-3应该是一样的。 –