按天和名称对列进行分组,并使用python pandas获取其开始和结束的最小值

需要按天和名称对列进行分组,并获得其开始和结束的最小值

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,'end':[np.min,'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

我需要通过将其开始值和结束值分组来获得最小值和最大值

jiedong0827 回答:按天和名称对列进行分组,并使用python pandas获取其开始和结束的最小值

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

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

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

根据需要重命名列。

本文链接:https://www.f2er.com/3160016.html

大家都在问