У меня около 500 000 записей в моем фреймворке данных, и я хотел бы применить какое-то сглаживание к этим данным, чтобы значительно уменьшить количество записей.Как применить нарезку к DataFrame?
Это образец dataframe df
:
EVENT GRADE SERVICE_TIME QUEUE_TIME HOLD_TIME
AAA 3 170 20 12
AAA 4 165 15 10
AAA 3 172 24 12
AAA 3 105 5 10
BBB 5 40 10 10
BBB 5 60 10 8
Цель состоит в том, чтобы уменьшить степень детализации SERVICE_TIME
, QUEUE_TIME
и HOLD_TIME
.
Чтобы сделать это, я хочу, чтобы записи группы по EVENT
и GRADE
, и оценить средние значения SERVICE_TIME
для окна среза 60 секунд (то есть [0; 60], [61; 120], [121; 180 ], [181; 240] и т. Д. До максимального значения SERVICE_TIME
). Важно, чтобы размер окна резки был гибко изменен с 60 на любое другое значение. Итак, нарезка должна применяться к SERVICE_TIME
, в то время как другие столбцы QUEUE_TIME
и QUEUE_TIME
должны быть просто усреднены соответственно.
Результат образца:
EVENT GRADE SERVICE_TIME QUEUE_TIME HOLD_TIME
AAA 3 171 22 12
AAA 3 105 5 10
AAA 4 165 15 10
BBB 5 50 10 9
Таким образом, два значения SERVICE_TIME
, 170 и 172, были объединены, потому что они оба принадлежат к окну нарезки [121; 180]. Поэтому я вычислил среднее значение 171
, а затем я просто усредняю средние значения QUEUE_TIME
и HOLD_TIME
.
Как это сделать?
Если бы мне пришлось просто вычислить среднее (без разрезания), то я сделал бы это так.
result = df.groupby(['EVENT','GRADE']).agg({'SERVICE_TIME': 'mean',
'QUEUE_TIME': 'mean',
'HOLD_TIME': 'mean'}).reset_index()