[英]Dropping dataframe rows in time series dataframe using pandas
我有以下數據序列作為 pandas dataframe
id,start,end,duration
303,2012-06-25 17:59:43,2012-06-25 18:01:29,105
404,2012-06-25 18:01:29,2012-06-25 18:01:55,25
303,2012-06-25 18:01:56,2012-06-25 18:02:06,10
303,2012-06-25 18:02:23,2012-06-25 18:02:44,21
404,2012-06-25 18:02:45,2012-06-25 18:02:51,6
303,2012-06-25 18:02:54,2012-06-25 18:03:17,23
404,2012-06-25 18:03:24,2012-06-25 18:03:41,17
303,2012-06-25 18:03:43,2012-06-25 18:05:51,128
101,2012-06-25 18:05:58,2012-06-25 18:24:22,1104
404,2012-06-25 18:24:24,2012-06-25 18:25:25,61
101,2012-06-25 18:25:25,2012-06-25 18:25:462,21
404,2012-06-25 18:25:49,2012-06-25 18:26:00,11
101,2012-06-25 18:26:01,2012-06-25 18:26:04,3
404,2012-06-25 18:26:05,2012-06-25 18:28:49,164
202,2012-06-25 18:28:52,2012-06-25 18:28:57,5
404,2012-06-25 18:29:00,2012-06-25 18:29:24,24
在另一個不同的 id 之后重復 id 404 應該總是如此。
例如,如果上面是房子中的運動傳感器,例如404 :走廊, 202 :卧室, 303 :廚房, 201 :書房,走廊在中間,那么從卧室到廚房到書房再回到卧室應該觸發202 , 404 , 303 , 404 , 201 , 404 , 202的順序是因為人們總是通過走廊 (404) 到達任何房間。 我的 output 有違反此順序的案例,我想刪除此類行。
例如,來自以下行上方的片段 dataframe 違反了這一點:
303,2012-06-25 18:01:56,2012-06-25 18:02:06,10
303,2012-06-25 18:02:23,2012-06-25 18:02:44,21
303,2012-06-25 18:03:43,2012-06-25 18:05:51,128
101,2012-06-25 18:05:58,2012-06-25 18:24:22,1104
因此應該刪除下面的行(但當然我有一個更大的數據集)。
303,2012-06-25 18:02:23,2012-06-25 18:02:44,21
101,2012-06-25 18:05:58,2012-06-25 18:24:22,1104
我嘗試過 shift 和 drop,但結果仍然存在一些不一致之處。
df['id_ns'] = df['id'].shift(-1)
df['id_ps'] = df['id'].shift(1)
if (df['id'] != 404):
df.drop(df[(df.id_ns != 404) & (df.id_ps != 404)].index, axis=0, inplace=True)
我怎樣才能最好地解決這個問題?
使用Series.ne
+ Series.shift
以及可選參數fill_value
創建 boolean mask
,使用此掩碼過濾/刪除行:
mask = df['id'].ne(404) & df['id'].shift(fill_value=404).ne(404)
df = df[~mask]
結果:
print(df)
id start end duration
0 303 2012-06-25 17:59:43 2012-06-25 18:01:29 105
1 404 2012-06-25 18:01:29 2012-06-25 18:01:55 25
2 303 2012-06-25 18:01:56 2012-06-25 18:02:06 10
4 404 2012-06-25 18:02:45 2012-06-25 18:02:51 6
5 303 2012-06-25 18:02:54 2012-06-25 18:03:17 23
6 404 2012-06-25 18:03:24 2012-06-25 18:03:41 17
7 303 2012-06-25 18:03:43 2012-06-25 18:05:51 128
9 404 2012-06-25 18:24:24 2012-06-25 18:25:25 61
10 101 2012-06-25 18:25:25 2012-06-25 18:25:46 21
11 404 2012-06-25 18:25:49 2012-06-25 18:26:00 11
12 101 2012-06-25 18:26:01 2012-06-25 18:26:04 3
13 404 2012-06-25 18:26:05 2012-06-25 18:28:49 164
14 202 2012-06-25 18:28:52 2012-06-25 18:28:57 5
15 404 2012-06-25 18:29:00 2012-06-25 18:29:24 24
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.