Сворачивание строк в многоиндексном фрейме данных с агрегацией

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных, который выглядит так:

         Date installed Date removed
ID Type                            
A  AA       2008-07-15   2008-12-29
   AA       2008-12-29   2009-10-15
   AAB      2009-10-15   2010-08-27
   AAB      2014-11-13   2015-04-28
  

и я хочу свернуть строки с одинаковым 'Type' индексом и иметь минимальную дату в 'Date installed' столбце и максимальную дату в ‘ Date removed' столбце. Как я могу это сделать?

Желаемый результат:

         Date installed Date removed
ID Type                            
A  AA       2008-07-15   2009-10-15
   AAB      2009-10-15   2015-04-28
  

и код:

 data = {'ID':['A', 'A', 'A', 'A'], 'Type':['AA', 'AA', 'AAB', 'AAB'], 'Date installed': ['2008-07-15',
'2008-12-29', '2009-10-15', '2014-11-13'], 'Date removed': ['2008-12-29', '2009-10-15', '2010-08-27', '2015-04-28']}
df.set_index(['ID', 'Type'], inplace=True)
  

Ответ №1:

Используйте GroupBy.agg по словарю для агрегирования min и max :

 df[['Date installed','Date removed']] = df[['Date installed','Date removed']].apply(pd.to_datetime)

df = df.groupby(level=[0,1]).agg({'Date installed':'min', 'Date removed':'max'})
print (df)
        Date installed Date removed
ID Type                            
A  AA       2008-07-15   2009-10-15
   AAB      2009-10-15   2015-04-28