根据日期和名称对列进行分组,并使用python-panda获取最小值及其开始和结束



需要按日期和名称对列进行分组,并用它们的开始和结束获得最小值

dataframe
day name value start end duration
Wednesday AAA 1 10/23/2019 2:46  10/23/2019 3:09 00:23
Wednesday AAA 1 10/23/2019 5:20  10/23/2019 5:44 00:24
Wednesday AAA 1 10/23/2019 6:51  10/23/2019 8:14 01:23
Wednesday AAA 17602 10/23/2019 12:35 10/23/2019 12:38 00:03
Wednesday AAA 1155 10/23/2019 15:50 10/23/2019 15:54 00:04

逻辑

df.groupby(['day','name']).agg({'duration':[np.min,np.max],'start':[np.min,np.max],'end':[np.min,np.max],'value':[np.min,np.max]})

我得到的

day name duration_min duration_max duration_max_start duration_max_end duration_min_start duration_min_end value_min value_max
Wednesday AAA 00:03 01:23 10/23/2019 6:51  10/23/2019 3:09 10/23/2019 12:35 10/23/2019 15:54 1  17602

但是我应该得到什么

day name duration_min duration_max duration_max_start duration_max_end value_max duration_min_start duration_min_end value_min
Wednesday AAA 00:03 01:23 10/23/2019 6:51  10/23/2019 8:14 1 10/23/2019 12:35 10/23/2019 12:38 17602

我想要的是通过分组它们的起始值和结束值来获得最小值和最大值

您想要的是出现持续时间min和max的同一行上的属性。你写的是每一列的最小值和最大值,无论它们是否在同一行。

使用idxmin&idxmax查找出现最小值和最大值的行,然后与原始帧合并:

idx = df.groupby(['day','name'])['duration'].agg(['idxmin','idxmax'])
idx.merge(df.add_suffix('_min'), left_on='idxmin', right_index=True) 
.merge(df.add_suffix('_max'), left_on='idxmax', right_index=True) 
[['duration_min', 'duration_max', 'start_min', 'end_min', 'start_max', 'end_max', 'value_min', 'value_max']]

结果:

day       | name | duration_min | duration_max | start_min           | end_min             | start_max           | end_max             | value_min | value_max
Wednesday | AAA  | 00:03        | 01:23        | 2019-10-23 12:35:00 | 2019-10-23 12:38:00 | 2019-10-23 06:51:00 | 2019-10-23 08:14:00 | 17602     | 1

根据需要重命名列。

最新更新