簡體   English   中英

使用 pandas 在時間序列 dataframe 中刪除 dataframe 行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM