Агрегация панд по таймелте и ее поведение
Я изо всех сил, чтобы сделать агрегацию на timedelta, включая построение графиков. Необработанные данные доступны здесь. По существу, данные имеют данные submit (datetime), resolved (datetime), PauseTime (timedelta) и Resolved-Submit-Pause (которые являются фактическим временем разрешения).
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")
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()