使用熊猫在时间序列数据框中删除数据框行

时间:2020-07-25 16:35:42

标签: python pandas dataframe timestamp time-series

我将以下数据序列作为大熊猫数据框

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)到达任何房间。我的输出中的案例违反了此顺序,我想删除此类行。

例如,下面几行上方的代码段数据框违反了此规定:

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

我曾尝试过移位和下降,但结果仍然存在一些不一致之处。

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)

我怎样才能最好地解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用Series.ne + Series.shift以及可选参数fill_value创建布尔值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