2017-08-01 48 views
1

過濾掉連續的行我與索引值和一個日期時間變量的數據集如下:從數據集

1  2017-01-03 09:30:01.958 
46  2017-01-03 09:30:47.879 
99  2017-01-03 09:33:48.121 
117 2017-01-03 09:47:06.215 
139 2017-01-03 09:51:06.054 
1567 2017-01-03 14:17:18.949 
2480 2017-01-03 15:57:13.442 
2481 2017-01-03 15:57:14.333 
2486 2017-01-03 15:57:37.500 
2487 2017-01-03 15:57:38.677 
2489 2017-01-03 15:57:41.053 
2491 2017-01-03 15:57:54.870 
2498 2017-01-03 15:59:24.210 

我所試圖做的是從數據刪除連續行(只保留第一從段觀察),在這種情況下,代碼應與指數2481和2487掉落行我嘗試使用

df[df.index.diff() == 0].drop() 

但它只返回

AttributeError: 'Int64Index' object has no attribute 'diff' 

回答

3

您可以使用boolean indexing,與index正與未實現的方法使用to_series

df = df[df.index.to_series().diff() != 1] 
print (df) 
         date 
1  2017-01-03 09:30:01.958 
46 2017-01-03 09:30:47.879 
99 2017-01-03 09:33:48.121 
117 2017-01-03 09:47:06.215 
139 2017-01-03 09:51:06.054 
1567 2017-01-03 14:17:18.949 
2480 2017-01-03 15:57:13.442 
2486 2017-01-03 15:57:37.500 
2489 2017-01-03 15:57:41.053 
2491 2017-01-03 15:57:54.870 
2498 2017-01-03 15:59:24.210 

謝謝piRSquared爲numpy的選擇:

df[np.append(0, np.diff(df.index.values)) != 1] 

時序

#[11000 rows x 1 columns] 
df = pd.concat([df]*1000) 

In [60]: %timeit [True] + [(i[0]+1) != i[1] for i in zip(df.index.tolist(), df.index.tolist()[1:])] 
100 loops, best of 3: 4.19 ms per loop 

In [61]: %timeit np.append(0, np.diff(df.index.values)) != 1 
The slowest run took 4.72 times longer than the fastest. This could mean that an intermediate result is being cached. 
10000 loops, best of 3: 33.1 µs per loop 

In [62]: %timeit df.index.to_series().diff() != 1 
1000 loops, best of 3: 260 µs per loop 
+1

我知道你們有些東西在你的袖子裏。有趣的是,[df.index.to_series()。diff()!= 1]會返回相同的結果 –

+0

我很喜歡你的可讀性,但是我做了一次timecomparison,爲什麼這麼慢呢?它是to_series()轉換嗎? –

+0

相同的答案,但''numpy-fied' ___'df [np.append(0,np.diff(df.index.values))!= 1]'這應該加快它。 – piRSquared

1

更多numpy

df[np.append(True, df.index.values[1:] != df.index.values[:-1] + 1)] 

         date 
1 2017-01-03 09:30:01.958 
46 2017-01-03 09:30:47.879 
99 2017-01-03 09:33:48.121 
117 2017-01-03 09:47:06.215 
139 2017-01-03 09:51:06.054 
1567 2017-01-03 14:17:18.949 
2480 2017-01-03 15:57:13.442 
2486 2017-01-03 15:57:37.500 
2489 2017-01-03 15:57:41.053 
2491 2017-01-03 15:57:54.870 
2498 2017-01-03 15:59:24.210