【发布时间】:2017-03-01 20:02:16
【问题描述】:
以下是我拥有的数据,
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、名称和时间,因此我希望两个值都为 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 循环并遍历所有值并检查条件。但我认为应该有一个有效的解决方案,因为我需要为数百万行找到它。
谁能帮我解决这个问题?
谢谢
【问题讨论】:
-
您的数据存储在文本文件或其他文件中?
-
@chiheb Nexus 我从 .csv 导入并将其作为数据框。
-
检查
itertoolsgroupby并尝试找到解决方案
标签: python python-2.7 python-3.x pandas dataframe