Агрегация Pandas на timedelta и ее поведение

Я изо всех сил пытаюсь выполнить агрегацию по timedelta, включая построение графика. Необработанные данные доступны здесь. По сути, данные имеют отправку (дата-время), разрешение (дата-время), время паузы (timedelta) и разрешение-отправить-пауза (фактическое время для разрешения)

для просмотра данных

test_df = pd.read_csv('test_df.csv')

#convert to date time stamps
test_df[['Submit','Resolved']] = test_df[['Submit','Resolved']].apply(pd.to_datetime)

#CONVERT PauseTime and Resolved-Submit-Pausetime to Timedelta

test_df['PauseTime']=pd.to_timedelta(test_df['PauseTime'])
test_df['Resolved-Submit-Pausetime'] = pd.to_timedelta(test_df['Resolved-Submit-Pausetime'])

Я пытаюсь агрегировать среднее значение за каждый день "Решено"

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean()

что дает мне ошибку - «DataError: нет числовых типов для агрегирования»

1) Как я могу агрегировать по среднему значению.

2) Также некоторые рекомендации по построению тренда среднего времени для разрешения (ось x будет иметь все даты, а ось y - среднюю временную дельту «Resolved-Submit-Pausetime»)


person Arun Iyer    schedule 18.08.2017    source источник
comment
Я могу получить работу test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].describe(), и моя версия pandas — «0.20. 3'   -  person Arun Iyer    schedule 18.08.2017


Ответы (1)


Используйте этот шаг, чтобы преобразовать столбец дельты времени в секунды:

test_df['Resolved-Submit-Pausetime'] = test_df['Resolved-Submit-Pausetime'].astype('timedelta64[s]')

0      1234.0
1     27380.0
2     33017.0
3      5454.0
4       433.0
5      2302.0
6     21753.0
7      3405.0
8      4779.0
9      3974.0
10     3389.0
11      114.0
Name: Resolved-Submit-Pausetime, dtype: float64

Затем запустите оператор groupby, чтобы вычислить среднее значение:

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean()

Resolved
2017-04-01    20543.666667
2017-04-02     7485.500000
2017-04-03     3132.200000
Name: Resolved-Submit-Pausetime, dtype: float64

Вы можете использовать Pandas, встроенные в инструменты построения графиков, чтобы сделать быстрый и грязный график среднего времени по отношению к группе по дням:

test_df.groupby([pd.Grouper(key='Resolved', freq='D')])['Resolved-Submit-Pausetime'].mean().plot()

введите здесь описание изображения

person kev8484    schedule 18.08.2017
comment
Спасибо за помощь. Как сделать ось в формате чч:мм? - person Arun Iyer; 18.08.2017