2016-02-11 139 views
0

我有一個數據幀,我想移除某些特定的重複行:再選擇大熊貓據幀基於索引

import numpy as np 
import pandas as pd 
nrows = 144  
df = pd.DataFrame(np.random.rand(nrows,), pd.date_range('2016-02-08 00:00:00', periods=nrows, freq='2h'), columns=['A']) 

數據幀是隨時間連續,提供數據每隔兩小時循環往復,但我選擇只是爲了簡潔起見顯示一個子集。我想從星期一開始的每8小時每隔72小時刪除一次數據,以便與改變數據的外部事件一致。對於數據快照,我想刪除2016年 - 02-08 08:00,2016-02-11 08:00,+ 3D等。

有沒有簡單的方法來做到這一點?

+0

您不清楚要刪除的內容。 36小時!= 3天,2016-02-08不是星期一。 – Goyo

+0

在美國,2016年2月8日是星期一。 –

+0

是的,我一定是在看錯日曆。所以你想刪除2016-02-08 08:00(第一個星期一),2016-02-11 08:00(3天后)和2016-02-14 08:00(6天后)以及2016- 02-15 08:00(星期一),然後從這裏重新開始計數? – Goyo

回答

0

IIUC你可以這樣做:

In [18]:  
start = df.index[(df.index.dayofweek == 0) & (df.index.hour == 8)][0] 
start 

Out[18]: 
Timestamp('2016-02-08 08:00:00') 

In [45]: 
df.loc[df.index.difference(pd.date_range(start, end=df.index[-1], freq='3D'))] 

Out[45]: 
          A 
2016-02-08 00:00:00 0.323742 
2016-02-08 02:00:00 0.962252 
2016-02-08 04:00:00 0.706537 
2016-02-08 06:00:00 0.561446 
2016-02-08 10:00:00 0.225042 
2016-02-08 12:00:00 0.746258 
2016-02-08 14:00:00 0.167950 
2016-02-08 16:00:00 0.199958 
2016-02-08 18:00:00 0.808286 
2016-02-08 20:00:00 0.288797 
2016-02-08 22:00:00 0.508109 
2016-02-09 00:00:00 0.980772 
2016-02-09 02:00:00 0.995731 
2016-02-09 04:00:00 0.742751 
2016-02-09 06:00:00 0.392247 
2016-02-09 08:00:00 0.460511 
2016-02-09 10:00:00 0.083660 
2016-02-09 12:00:00 0.273620 
2016-02-09 14:00:00 0.791506 
2016-02-09 16:00:00 0.440630 
2016-02-09 18:00:00 0.326418 
2016-02-09 20:00:00 0.790780 
2016-02-09 22:00:00 0.521131 
2016-02-10 00:00:00 0.219315 
2016-02-10 02:00:00 0.016625 
2016-02-10 04:00:00 0.958566 
2016-02-10 06:00:00 0.405643 
2016-02-10 08:00:00 0.958025 
2016-02-10 10:00:00 0.786663 
2016-02-10 12:00:00 0.589064 
...      ... 
2016-02-17 12:00:00 0.360848 
2016-02-17 14:00:00 0.757499 
2016-02-17 16:00:00 0.391574 
2016-02-17 18:00:00 0.062812 
2016-02-17 20:00:00 0.308282 
2016-02-17 22:00:00 0.251520 
2016-02-18 00:00:00 0.832871 
2016-02-18 02:00:00 0.387108 
2016-02-18 04:00:00 0.070969 
2016-02-18 06:00:00 0.298831 
2016-02-18 08:00:00 0.878526 
2016-02-18 10:00:00 0.979233 
2016-02-18 12:00:00 0.386620 
2016-02-18 14:00:00 0.420962 
2016-02-18 16:00:00 0.238879 
2016-02-18 18:00:00 0.124069 
2016-02-18 20:00:00 0.985828 
2016-02-18 22:00:00 0.585278 
2016-02-19 00:00:00 0.409226 
2016-02-19 02:00:00 0.093945 
2016-02-19 04:00:00 0.389450 
2016-02-19 06:00:00 0.378091 
2016-02-19 08:00:00 0.874232 
2016-02-19 10:00:00 0.527629 
2016-02-19 12:00:00 0.490236 
2016-02-19 14:00:00 0.509008 
2016-02-19 16:00:00 0.097061 
2016-02-19 18:00:00 0.111626 
2016-02-19 20:00:00 0.877099 
2016-02-19 22:00:00 0.796201 

[140 rows x 1 columns] 

所以這通過對比dayofweekhour,並採取第一指標值判定起始範圍,我們再使用date_range生成一個指數,該指數調用difference刪除這些行並將它們傳遞到loc

+0

這個解決方案接近期望的輸出,如果我只是想在星期一掩蓋數據,那麼它就可以工作。但是,我需要從星期一開始每隔3天(72小時)屏蔽數據。 –

+0

你原來的帖子是36小時,你可以改變'freq ='3D',它應該工作 – EdChum