Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分组并查找连续时间,并在Python中创建标志_Python_Python 2.7_Python 3.x_Pandas_Dataframe - Fatal编程技术网

分组并查找连续时间,并在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
,然后尝试找到解决方案