分组并查找连续时间,并在Python中创建标志
以下是我掌握的数据分组并查找连续时间,并在Python中创建标志,python,python-2.7,python-3.x,pandas,dataframe,Python,Python 2.7,Python 3.x,Pandas,Dataframe,以下是我掌握的数据 id name unused time 1 a 1 2/21/2017 18:01:31.168 1 a 2 2/21/2017 18:01:31.168 1 a 3 2/21/2017 18:11:44.054 1 a 4 2/21/2017 18:19:03.147 1 b 5 2/21/2017 18:19:03.
id name unused time
1 a 1 2/21/2017 18:01:31.168
1 a 2 2/21/2017 18:01:31.168
1 a 3 2/21/2017 18:11:44.054
1 a 4 2/21/2017 18:19:03.147
1 b 5 2/21/2017 18:19:03.147
1 b 6 2/21/2017 21:55:43.927
1 b 7 2/21/2017 22:10:29.699
1 b 8 2/21/2017 22:10:29.699
2 a 9 2/21/2017 23:36:30.239
2 a 10 2/21/2017 23:45:40.005
2 a 11 2/22/2017 00:05:43.466
2 a 12 2/22/2017 00:05:43.466
2 b 13 2/22/2017 00:16:00.646
2 b 14 2/22/2017 11:43:16.250
2 b 15 2/22/2017 11:43:16.250
2 b 16 2/22/2017 14:02:10.531
我想将它与id、名称进行分组,查找连续的时间戳,并为其创建一个标志。例如,第一行和第二行具有相同的id、名称和时间,因此我希望两个值都为1,如果不是连续的,则应为0
以下是我试图实现的输出
id name unused time flag
1 a 1 2/21/2017 18:01:31.168 1
1 a 2 2/21/2017 18:01:31.168 1
1 a 3 2/21/2017 18:11:44.054 0
1 a 4 2/21/2017 18:19:03.147 0
1 b 5 2/21/2017 18:19:03.147 0
1 b 6 2/21/2017 21:55:43.927 0
1 b 7 2/21/2017 22:10:29.699 1
1 b 8 2/21/2017 22:10:29.699 1
2 a 9 2/21/2017 23:36:30.239 0
2 a 10 2/21/2017 23:45:40.005 0
2 a 11 2/22/2017 00:05:43.466 1
2 a 12 2/22/2017 00:05:43.466 1
2 b 13 2/22/2017 00:16:00.646 0
2 b 14 2/22/2017 11:43:16.250 1
2 b 15 2/22/2017 11:43:16.250 1
2 b 16 2/22/2017 14:02:10.531 0
下面是我的努力,
我试着把它分类
data.sort_values(['id', 'name', 'time'])
然后我想把它分组
data.sort_values(['id', 'name', 'time']).groupby(['id', 'name'])
但在那之后我无法创建国旗。我正在考虑一个解决方案,在这个解决方案中,我可以编写一个for循环,循环所有的值并检查条件。但我认为应该有一个有效的解决方案,因为我需要为一百万行找到它
有人能帮我解决这个问题吗
谢谢一种方法可能是将一个前进和一个后退与您感兴趣的列进行比较
eval_cols = df[['id', 'name', 'time']]
df['flag'] = ((eval_cols == eval_cols.shift()).all(1) |
(eval_cols == eval_cols.shift(-1)).all(1)).astype(int)
演示
>>> ((eval_cols == eval_cols.shift()).all(1) |
(eval_cols == eval_cols.shift(-1)).all(1)).astype(int)
0 1
1 1
2 0
3 0
4 0
5 0
6 1
7 1
8 0
9 0
10 1
11 1
12 0
13 1
14 1
15 0
dtype: int32
您的数据存储在文本文件或其他文件中?@chiheb Nexus I从.csv导入并将其作为数据帧。请检查
itertools
groupby
,然后尝试找到解决方案