Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Pandas 按键消除行时间列并排序_Pandas_Csv_Row - Fatal编程技术网

Pandas 按键消除行时间列并排序

Pandas 按键消除行时间列并排序,pandas,csv,row,Pandas,Csv,Row,我是python的新手。我有很多数据。我需要及时消除其中一些。我有“first”和“last”出现ID。示例ID_A首次出现在17:31:14,最后一次出现在17:31:25 我的数据如下所示: df ID Time ID_A 17:31:14 ID_A 17:31:25 ID_B 10:16:55 ID_B 15:50:15 ID_C 12:34:57 ID_C 12:41:07 ID_D 15:37:47 ID_D 15:3

我是python的新手。我有很多数据。我需要及时消除其中一些。我有“first”和“last”出现ID。示例ID_A首次出现在17:31:14,最后一次出现在17:31:25

我的数据如下所示:

 df
 ID         Time
 ID_A   17:31:14
 ID_A   17:31:25
 ID_B   10:16:55
 ID_B   15:50:15
 ID_C   12:34:57
 ID_C   12:41:07
 ID_D   15:37:47
 ID_D   15:37:56
 ID_E   16:25:00
 ID_E   18:37:13
 ID_F   11:35:05
 ID_F   11:40:15
ID          Time
ID_F    11:35:05
ID_F    11:40:15
ID_C    12:34:57
ID_C    12:41:07
我想消除基于时间的ID。我认为第一次和最后一次删除ID行数据不到2分钟,超过60分钟。消除后,我想按时间值对ID进行排序

我的预期结果如下所示:

 df
 ID         Time
 ID_A   17:31:14
 ID_A   17:31:25
 ID_B   10:16:55
 ID_B   15:50:15
 ID_C   12:34:57
 ID_C   12:41:07
 ID_D   15:37:47
 ID_D   15:37:56
 ID_E   16:25:00
 ID_E   18:37:13
 ID_F   11:35:05
 ID_F   11:40:15
ID          Time
ID_F    11:35:05
ID_F    11:40:15
ID_C    12:34:57
ID_C    12:41:07

请帮我做这件事。谢谢您

使用
numpy
中的
ptp
,然后在
之间的
之后使用
isin

import numpy as np

df.Time=pd.to_timedelta(df.Time)
s=df.groupby('ID')['Time'].apply(np.ptp).dt.total_seconds().between(2*60,90*60)
df_sub=df.loc[df.ID.isin(s[s].index)]
df_sub
Out[35]: 
      ID     Time
4   ID_C 12:34:57
5   ID_C 12:41:07
10  ID_F 11:35:05
11  ID_F 11:40:15
现在让我们看看排序部分,我使用
transform
获取每个组ID的最小值,使用
argsort
获取位置

df_sub=df_sub.iloc[df_sub.groupby('ID')['Time'].transform('min').argsort()]
Out[38]: 
      ID     Time
10  ID_F 11:35:05
11  ID_F 11:40:15
4   ID_C 12:34:57
5   ID_C 12:41:07