Добавить столбец квантилей для timedelta [Pandas]

#python #pandas #numpy

#python #pandas #numpy

Вопрос:

Я хотел бы добавить среднее значение и квантили для примерной таблицы, которую я добавил ниже — однако у меня проблемы с квантилями. Это то, что я пробовал до сих пор:

 df_grouped = df.groupby('date') 
       .agg({'delay':'count', 'delay_time':'mean'}) 
       .rename(columns={'delay':'#_delays','delay_time':'Mean_flight_delays'}) 
       .reset_index()
  

Main_df

 date           flight_#   delay      delay_time
2019-01-01     100        1          04h:10min
2019-01-01     123        1          03h:58min
2019-01-01     121        1          04h:12min
2019-01-01     101        1          03h:45min
  

Output_df

 date           #_delays    Mean_flight_delays   0.25_quantile.  0.50_quantile   0.75_quantile  
2019-01-01     100         4:01:15 
  

Ответ №1:

Вот вариант:

 df_grouped = (df.groupby('date')
        .agg({
           'delay': 'count',
           'delay_time': [
               ('delay_mean', lambda x: x.mean()),
               ('delay_q25', lambda x: x.quantile(0.25)),
               ('delay_q50', lambda x: x.quantile(0.5)),
               ('delay_q75', lambda x: x.quantile(0.75)),
           ]})
       .droplevel(0, 1)
       .reset_index())

print(df_grouped)
  

Вывод:

          date  count      delay_mean       delay_q25       delay_q50  
0  2019-01-01      4 0 days 04:01:15 0 days 03:54:45 0 days 04:04:00   

        delay_q75  
0 0 days 04:10:30  
  

PS Вы также можете установить interpolation параметр quantile в соответствии с вашими потребностями (по умолчанию он линейный, см. Документ)