【发布时间】:2020-11-15 08:07:06
【问题描述】:
我有以下数据序列作为熊猫数据框
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 404 应该总是在另一个不同的 id 之后重复出现。
例如,如果上面是房子里的运动传感器,例如404:走廊,202:卧室,303:厨房,201:书房,走廊在中间,然后从卧室到厨房再到书房再回到卧室应该触发202、404、303、404、201、404、202 的顺序,因为人们总是通过走廊 (404) 到达任何房间。我的输出中包含违反此顺序的案例,我想删除此类行。
例如,从下面行上方的 sn-p 数据帧中违反了这一点:
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)
我怎样才能最好地解决这个问题?
【问题讨论】:
标签: python pandas dataframe timestamp time-series