python - 使用熊猫在时间序列数据帧中删除数据帧行
问题描述
我有以下数据序列作为熊猫数据框
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
我尝试过 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
推荐阅读
- javascript - 在 MVC 中提交无序列表
- css - 支持 IE 中的伪元素上的光标
- spring - 在 Spring Boot 中禁用“via”http 标头
- android - 仅粘贴剪贴板中的数字
- r - R:从本地 tar.gz 安装 R 包时找不到“make”
- reactjs - 找不到模块:错误:无法使用打字稿解析“反应选择”
- liferay - liferay dxp 7.0 钩子,新的 jsp 文件
- python - 从python脚本执行字符串化的python函数
- javascript - 导入未使用的 JS 模块时我们会“丢失”一些东西吗?
- jquery - jquery ui resiable-如何强制在父级内调整大小?