如何通过timestamp diff修剪pandas数据帧中的行

时间:2017-05-08 22:00:13

标签: python pandas datetime

我有一个数据帧,包括每个随机时间间隔(从1到50秒)的路线坐标和时间戳,如this数据帧样本中所示。我正在寻找一种方法来修剪数据集,以便只保持时间差大于或等于30秒。

例如,如果索引的时间戳如下所示:

  • [0] 2017-03-27 06:52:30
  • [1] 2017-03-27 06:52:32
  • [2] 2017-03-27 06:52:45
  • [3] 2017-03-27 06:52:59
  • [4] 2017-03-27 06:53:02
  • [5] 2017-03-27 06:53:32
  • [...] ......

Idealy我想只保留:

  • [0] 2017-03-27 06:52:30
  • [4] 2017-03-27 06:53:02
  • [5] 2017-03-27 06:53:32
  • [...] ......

事件提示会有所帮助!

谢谢!

2 个答案:

答案 0 :(得分:2)

考虑数据框df

from pandas import Timestamp

df = pd.DataFrame({
        'date': [Timestamp('2017-03-27 06:52:30'),
                 Timestamp('2017-03-27 06:52:32'),
                 Timestamp('2017-03-27 06:52:45'),
                 Timestamp('2017-03-27 06:52:59'),
                 Timestamp('2017-03-27 06:53:02'),
                 Timestamp('2017-03-27 06:53:32')]
    })

我使用生成器筛选并确定增量时间何时超过某个阈值并返回索引。

def f(s, thresh):
    cur = None
    for i, v in s.iteritems():
        if (cur is None) or (v - cur >= thresh):
            yield i
            cur = v


df.loc[list(f(df.date, pd.to_timedelta(30, 's')))]

                 date
0 2017-03-27 06:52:30
4 2017-03-27 06:53:02
5 2017-03-27 06:53:32

答案 1 :(得分:0)

由于您尚未提供数据框,因此我们假设您的列名为time。 你可以这样做:df.time.shift(1) - df.time。这将为您提供一系列差异。现在,您可以使用索引,现在使用新列来过滤time列。

此帖子here不重复,但可用于此shift方法的应用。

这是我如何接近它的一个重要提示。希望它有所帮助!

P.S。请提供完整的数据框以供将来参考,以便可以清楚地看到代码并将其作为回复引用。