2017-05-08 64 views
1

我有一個數據幀,包括每個隨機時間間隔(從1到50秒)的路由座標和時間戳,如this數據幀示例所示。我正在尋找一種方法來修整數據集,以便只保留大於或等於30秒的時間差。如何通過時間戳修整熊貓數據幀中的行diff

例如,如果由索引時間戳是這樣的:

  • [0] 2017年3月27日6點52分30秒
  • [1] 2017年3月27日6時52分:32
  • [2] 2017年3月27日6點52分45秒
  • [3] 2017年3月27日6點52分59秒
  • [4] 2017年3月27日6點53分02秒
  • [5] 2017-03-27 06:53:32
  • [...] ...

Idealy我想只保留:

  • [0] 2017年3月27日6點52分三十秒
  • [4 ] 2017年3月27日6點53分02秒
  • [5] 2017年3月27日6點53分三十二秒
  • [...] ...

事件的提示會有幫助!

謝謝!

回答

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

這很聰明! – MaxU

+0

@MaxU謝謝你:-) – piRSquared

+0

非常感謝!它的措辭如預期! – oikonang

0

由於您還沒有提供數據框,因此假設您的列名是time。 你可以這樣做:df.time.shift(1) - df.time。這會給你一個分歧的列。現在您可以使用索引,然後使用新列來篩選time列。

此帖子here不是重複的,但可用於此shift方法的應用。

這是我如何接近它的一個重要暗示。希望能幫助到你!

P.s.請提供完整的數據框以供將來參考,以便可以清楚地看到並參考代碼。