сгруппируйте столбцы по дню и имени и получите минимальное значение с их началом и концом, используя панд Python - PullRequest
1 голос
/ 05 ноября 2019

нужно сгруппировать столбцы по дню и имени и получить минимальное значение с их началом и концом

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

что мне нужно, так это получить минимальное и максимальное значения путем группировки их начальных и конечных значений

1 Ответ

0 голосов
/ 05 ноября 2019

То, что вы хотите, это атрибуты в той же строке, где встречаются длительность min и max. То, что вы написали, - это минимальное и максимальное значения каждого отдельного столбца, независимо от того, находятся они в одной строке или нет.

Используйте idxmin & idxmax, чтобы найти строку, в которой встречаются значения min и max, затем объединитес исходным кадром:

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

Переименуйте столбцы по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...