【问题标题】:Filtering pandas dataframe for a steady speed condition过滤熊猫数据帧以获得稳定的速度条件
【发布时间】:2017-06-29 03:47:38
【问题描述】:

下面是一个示例数据框,它与我的类似,只是我正在处理的数据框有 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 是我的实际数据中后续行之间的时间差(它有日期和时间)。运行速度不断变化,我想要实现的是过滤掉速度几乎稳定的所有数据点,例如过滤标准偏差 =15 分钟。例如,如果我们从第一个速度开始,代码应该能够继续跳到下一个速度,继续计算标准偏差,如果它小于 0.5 并且 delta_T 总和达到 30 分钟以上,我应该复制那个数据到一个新的数据框。 所以对于这个数据框,我将留下索引 5 到 8 和 10 到 15。

这可能吗?你能给我一些建议吗?对不起,我被卡住了。这对我来说似乎很复杂。

谢谢。

最好的问候阿伦

【问题讨论】:

  • 你能发布你想要的数据集吗?
  • 谢谢。它看起来像这样。 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]],columns=['speed','delta_t'])。我刚刚从原始数据创建了另一个数据框来获得我想要的。理想情况下,代码应该根据标准和时间标准创建一个新的

标签: python pandas dataframe filtering


【解决方案1】:

让我们使用rolling,shiftstd

计算窗口为 3 的滚动标准,找出小于 0.5 的标准,并使用 shift(-2) 获取标准小于 0.5 的窗口开始处的值。使用带有|(or) 的布尔索引,我们可以获得整个稳态范围。

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

【讨论】:

  • 嗨。非常感谢您的回复。这适用于我给你的数据。但是,如果我需要在超过 20 分钟的时间标准内完成它,那是不是不对?我尝试滚动 4 并更改班次,但它不起作用。我希望能够更改 delta T 标准。
  • 我不明白为什么不这样做。让我们用不同的数据集进行测试。 4 rolling 和 shift -3 应该是一样的。
猜你喜欢
  • 2017-11-20
  • 2016-05-05
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
相关资源
最近更新 更多