То, что вы хотите, это атрибуты в той же строке, где встречаются длительность 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
Переименуйте столбцы по мере необходимости.