python - 按时间间隔分组并查找具有相似最小值(进入时间值)的唯一 ID

标签 python pandas datetime group-by

Datanovice 在这篇文章中帮助了我 Determining group size based entry and exit times of IDs in my df ,所以我进一步解决了我的问题。但是,我现在如何将数据集(参见下面的子集)分组为日期时间秒,并查看 ID 的“最小值”,并灵活地计算分组“日期”秒中具有共同“最小值”值的唯一 ID例如,一分钟。有什么聪明的方法可以做到这一点吗?

t_code  date                x   y   id      min                 max
4632    2019-09-17 10:17:10 209 201 5170    2019-09-17 09:38:19 2019-09-17 12:47:49
4632    2019-09-17 10:17:10 362 67  5163    2019-09-17 09:38:03 2019-09-17 10:18:29
4633    2019-09-17 10:17:11 209 200 5170    2019-09-17 09:38:19 2019-09-17 12:47:49
4633    2019-09-17 10:17:11 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21
4633    2019-09-17 10:17:11 337 157 5141    2019-09-17 09:37:22 2019-09-17 12:06:30
4633    2019-09-17 10:17:11 391 77  5284    2019-09-17 10:15:59 2019-09-17 10:18:30
4633    2019-09-17 10:17:11 363 69  5163    2019-09-17 09:38:03 2019-09-17 10:18:29
4633    2019-09-17 10:17:11 336 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44
4634    2019-09-17 10:17:12 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21
4634    2019-09-17 10:17:12 337 157 5141    2019-09-17 09:37:22 2019-09-17 12:06:30
4634    2019-09-17 10:17:12 391 76  5284    2019-09-17 10:15:59 2019-09-17 10:18:30
4634    2019-09-17 10:17:12 363 70  5163    2019-09-17 09:38:03 2019-09-17 10:18:29
4634    2019-09-17 10:17:12 335 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44
4634    2019-09-17 10:17:12 209 201 5170    2019-09-17 09:38:19 2019-09-17 12:47:49
4635    2019-09-17 10:17:13 391 77  5284    2019-09-17 10:15:59 2019-09-17 10:18:30
4635    2019-09-17 10:17:13 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21
4635    2019-09-17 10:17:13 209 201 5170    2019-09-17 09:38:19 2019-09-17 12:47:49
4635    2019-09-17 10:17:13 335 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44
4635    2019-09-17 10:17:13 363 69  5163    2019-09-17 09:38:03 2019-09-17 10:18:29
4635    2019-09-17 10:17:13 337 158 5141    2019-09-17 09:37:22 2019-09-17 12:06:30
4636    2019-09-17 10:17:14 337 158 5141    2019-09-17 09:37:22 2019-09-17 12:06:30   
4636    2019-09-17 10:17:14 392 76  5284    2019-09-17 10:15:59 2019-09-17 10:18:30
4636    2019-09-17 10:17:14 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21
4636    2019-09-17 10:17:14 209 201 5170    2019-09-17 09:38:19 2019-09-17 12:47:49
4636    2019-09-17 10:17:14 335 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44
4637    2019-09-17 10:17:15 209 200 5170    2019-09-17 09:38:19 2019-09-17 12:47:49
4637    2019-09-17 10:17:15 247 233 5177    2019-09-17 09:38:27 2019-09-17 11:14:21
4637    2019-09-17 10:17:15 357 69  5163    2019-09-17 09:38:03 2019-09-17 10:18:29
4637    2019-09-17 10:17:15 335 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44
4637    2019-09-17 10:17:15 390 74  5284    2019-09-17 10:15:59 2019-09-17 10:18:30
4637    2019-09-17 10:17:15 337 157 5141    2019-09-17 09:37:22 2019-09-17 12:06:30
4638    2019-09-17 10:17:16 335 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44
4638    2019-09-17 10:17:16 337 154 5141    2019-09-17 09:37:22 2019-09-17 12:06:30
4638    2019-09-17 10:17:16 209 201 5170    2019-09-17 09:38:19 2019-09-17 12:47:49
4638    2019-09-17 10:17:16 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21
4638    2019-09-17 10:17:16 356 69  5163    2019-09-17 09:38:03 2019-09-17 10:18:29
4639    2019-09-17 10:17:17 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21
4639    2019-09-17 10:17:17 335 152 5141    2019-09-17 09:37:22 2019-09-17 12:06:30
4639    2019-09-17 10:17:17 355 71  5163    2019-09-17 09:38:03 2019-09-17 10:18:29
4639    2019-09-17 10:17:17 392 74  5284    2019-09-17 10:15:59 2019-09-17 10:18:30
4639    2019-09-17 10:17:17 335 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44

我有一个很长的数据集,预期结果的样本如下所示:

t_code  date                x   y   id      min                 max                     GroupSize
4632    2019-09-17 10:17:10 209 201 5170    2019-09-17 09:38:19 2019-09-17 12:47:49     2
4632    2019-09-17 10:17:10 362 67  5163    2019-09-17 09:38:03 2019-09-17 10:18:29     2
4633    2019-09-17 10:17:11 209 200 5170    2019-09-17 09:38:19 2019-09-17 12:47:49     3
4633    2019-09-17 10:17:11 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21     3
4633    2019-09-17 10:17:11 337 157 5141    2019-09-17 09:37:22 2019-09-17 12:06:30     1
4633    2019-09-17 10:17:11 391 77  5284    2019-09-17 10:15:59 2019-09-17 10:18:30     1
4633    2019-09-17 10:17:11 363 69  5163    2019-09-17 09:38:03 2019-09-17 10:18:29     3
4633    2019-09-17 10:17:11 336 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44     1
4634    2019-09-17 10:17:12 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21     3
4634    2019-09-17 10:17:12 337 157 5141    2019-09-17 09:37:22 2019-09-17 12:06:30     1
4634    2019-09-17 10:17:12 391 76  5284    2019-09-17 10:15:59 2019-09-17 10:18:30     2
4634    2019-09-17 10:17:12 391 76  9000    2019-09-17 10:15:39 2019-09-17 10:18:30     2
4634    2019-09-17 10:17:12 363 70  5163    2019-09-17 09:38:03 2019-09-17 10:18:29     3
4634    2019-09-17 10:17:12 335 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44     1
4634    2019-09-17 10:17:12 209 201 5170    2019-09-17 09:38:19 2019-09-17 12:47:49     3
4635    2019-09-17 10:17:13 391 77  5284    2019-09-17 10:15:59 2019-09-17 10:18:30     1  
4635    2019-09-17 10:17:13 247 232 5177    2019-09-17 09:38:27 2019-09-17 11:14:21     3  
4635    2019-09-17 10:17:13 209 201 5170    2019-09-17 09:38:19 2019-09-17 12:47:49     3 
4635    2019-09-17 10:17:13 335 227 5282    2019-09-17 10:08:50 2019-09-17 13:13:44     1
4635    2019-09-17 10:17:13 363 69  5163    2019-09-17 09:38:03 2019-09-17 10:18:29     3

非常感谢您的帮助!!

最佳答案

用途:

df['Groupsize']=( df.groupby(['date',pd.Grouper(key = 'min',freq = 'T')])
                    .id
                    .transform('size') )
print(df)

#or this
#df['Groupsize']=( df.groupby([df['date'].dt.second,pd.Grouper(key = 'min',freq = 'T')])
#                    .id
#                    .transform('size') )


    t_code                date    x    y    id                 min  \
0     4632 2019-09-17 10:17:10  209  201  5170 2019-09-17 09:38:19   
1     4632 2019-09-17 10:17:10  362   67  5163 2019-09-17 09:38:03   
2     4633 2019-09-17 10:17:11  209  200  5170 2019-09-17 09:38:19   
3     4633 2019-09-17 10:17:11  247  232  5177 2019-09-17 09:38:27   
4     4633 2019-09-17 10:17:11  337  157  5141 2019-09-17 09:37:22   
5     4633 2019-09-17 10:17:11  391   77  5284 2019-09-17 10:15:59   
6     4633 2019-09-17 10:17:11  363   69  5163 2019-09-17 09:38:03   
7     4633 2019-09-17 10:17:11  336  227  5282 2019-09-17 10:08:50   
8     4634 2019-09-17 10:17:12  247  232  5177 2019-09-17 09:38:27   
9     4634 2019-09-17 10:17:12  337  157  5141 2019-09-17 09:37:22   
10    4634 2019-09-17 10:17:12  391   76  5284 2019-09-17 10:15:59   
11    4634 2019-09-17 10:17:12  363   70  5163 2019-09-17 09:38:03   
12    4634 2019-09-17 10:17:12  335  227  5282 2019-09-17 10:08:50   
13    4634 2019-09-17 10:17:12  209  201  5170 2019-09-17 09:38:19   
14    4635 2019-09-17 10:17:13  391   77  5284 2019-09-17 10:15:59   
15    4635 2019-09-17 10:17:13  247  232  5177 2019-09-17 09:38:27   
16    4635 2019-09-17 10:17:13  209  201  5170 2019-09-17 09:38:19   
17    4635 2019-09-17 10:17:13  335  227  5282 2019-09-17 10:08:50   
18    4635 2019-09-17 10:17:13  363   69  5163 2019-09-17 09:38:03   
19    4635 2019-09-17 10:17:13  337  158  5141 2019-09-17 09:37:22   
20    4636 2019-09-17 10:17:14  337  158  5141 2019-09-17 09:37:22   
21    4636 2019-09-17 10:17:14  392   76  5284 2019-09-17 10:15:59   
22    4636 2019-09-17 10:17:14  247  232  5177 2019-09-17 09:38:27   
23    4636 2019-09-17 10:17:14  209  201  5170 2019-09-17 09:38:19   
24    4636 2019-09-17 10:17:14  335  227  5282 2019-09-17 10:08:50   
25    4637 2019-09-17 10:17:15  209  200  5170 2019-09-17 09:38:19   
26    4637 2019-09-17 10:17:15  247  233  5177 2019-09-17 09:38:27   
27    4637 2019-09-17 10:17:15  357   69  5163 2019-09-17 09:38:03   
28    4637 2019-09-17 10:17:15  335  227  5282 2019-09-17 10:08:50   
29    4637 2019-09-17 10:17:15  390   74  5284 2019-09-17 10:15:59   
30    4637 2019-09-17 10:17:15  337  157  5141 2019-09-17 09:37:22   
31    4638 2019-09-17 10:17:16  335  227  5282 2019-09-17 10:08:50   
32    4638 2019-09-17 10:17:16  337  154  5141 2019-09-17 09:37:22   
33    4638 2019-09-17 10:17:16  209  201  5170 2019-09-17 09:38:19   
34    4638 2019-09-17 10:17:16  247  232  5177 2019-09-17 09:38:27   
35    4638 2019-09-17 10:17:16  356   69  5163 2019-09-17 09:38:03   
36    4639 2019-09-17 10:17:17  247  232  5177 2019-09-17 09:38:27   
37    4639 2019-09-17 10:17:17  335  152  5141 2019-09-17 09:37:22   
38    4639 2019-09-17 10:17:17  355   71  5163 2019-09-17 09:38:03   
39    4639 2019-09-17 10:17:17  392   74  5284 2019-09-17 10:15:59   
40    4639 2019-09-17 10:17:17  335  227  5282 2019-09-17 10:08:50   

                   max  Groupsize  
0  2019-09-17 12:47:49          2  
1  2019-09-17 10:18:29          2  
2  2019-09-17 12:47:49          3  
3  2019-09-17 11:14:21          3  
4  2019-09-17 12:06:30          1  
5  2019-09-17 10:18:30          1  
6  2019-09-17 10:18:29          3  
7  2019-09-17 13:13:44          1  
8  2019-09-17 11:14:21          3  
9  2019-09-17 12:06:30          1  
10 2019-09-17 10:18:30          1  
11 2019-09-17 10:18:29          3  
12 2019-09-17 13:13:44          1  
13 2019-09-17 12:47:49          3  
14 2019-09-17 10:18:30          1  
15 2019-09-17 11:14:21          3  
16 2019-09-17 12:47:49          3  
17 2019-09-17 13:13:44          1  
18 2019-09-17 10:18:29          3  
19 2019-09-17 12:06:30          1  
20 2019-09-17 12:06:30          1  
21 2019-09-17 10:18:30          1  
22 2019-09-17 11:14:21          2  
23 2019-09-17 12:47:49          2  
24 2019-09-17 13:13:44          1  
25 2019-09-17 12:47:49          3  
26 2019-09-17 11:14:21          3  
27 2019-09-17 10:18:29          3  
28 2019-09-17 13:13:44          1  
29 2019-09-17 10:18:30          1  
30 2019-09-17 12:06:30          1  
31 2019-09-17 13:13:44          1  
32 2019-09-17 12:06:30          1  
33 2019-09-17 12:47:49          3  
34 2019-09-17 11:14:21          3  
35 2019-09-17 10:18:29          3  
36 2019-09-17 11:14:21          2  
37 2019-09-17 12:06:30          1  
38 2019-09-17 10:18:29          2  
39 2019-09-17 10:18:30          1  
40 2019-09-17 13:13:44          1  

关于python - 按时间间隔分组并查找具有相似最小值(进入时间值)的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59490590/

相关文章:

python - 如何在 Python/Pandas 中仅表示日期的小时部分

sql-server - 导入 SQL Server 2012 时,Excel 中的日期时间值意外更改

python - 如何为pandas中的每个逗号分隔值创建一个新行

python - 如何清理 pandas 数据框中的图像格式?

c# - 获取该月下一个第 n 天的 DateTime

python - 使用 .str.replace() 与 .replace() 更新 pandas DataFrame

python - 使用groupby对A列进行分组,然后根据B列创建一个列表

Python:如何最好地解析 csv 并仅计算一个子集的值

python - 是否可以在不关心大小的情况下检查 numpy dtype?

python - 根据用户 ID PySpark 在训练测试中分割行