过滤pandas数据帧以获得稳定的速度条件

时间:2017-06-28 17:01:30

标签: python pandas dataframe filtering

下面是一个类似于我的示例数据框,除了我正在处理的数据框有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列,'Speed'和'Delta_T'。 Delta_T是我实际数据中后续行之间的时间差(它有日期和时间)。操作速度保持不变,我想要实现的是过滤出速度接近稳定的所有数据点,例如通过过滤标准偏差<1。 0.5和Delta_T> = 15分钟。例如,如果我们以第一速度开始,代码应该能够继续跳到下一个速度,继续计算标准偏差,如果它小于0.5并且delta_T总和最多30分钟,我应该复制那个将数据转换为新的数据帧。 因此,对于这个数据帧,我将留下索引5到8和10到15。

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

谢谢。

最好的问候Arun

1 个答案:

答案 0 :(得分:0)

让我们使用rollingshiftstd

计算窗口为3的滚动std,找到小于0.5的stds并使用shift(-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