以下是我所拥有的数据,
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,name和连续的时间戳来分组,并为它创建一个标志。例如,第1行和第2行有相同的id,name和time,所以我想用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循环,循环所有的值,检查条件,但是我认为应该有一个有效的解决方案,因为我需要找到百万行的标志。
有人能帮我解决这个问题吗?
谢谢
2条答案
按热度按时间wgx48brx1#
一种方法是使用
shift
将一个向前的列和一个向后的列与感兴趣的列进行比较。演示
mctunoxg2#
输出: