Как рассчитать среднее значение и отклонение от объекта datetime панд? - PullRequest
0 голосов
/ 09 февраля 2019

Как рассчитать сводную статистику (среднее и стандартное отклонение) для объектов даты и времени Python в форме ГГГГ-ММ-ДД?Я хочу сделать это для разных групп объектов datetime, которые имеют разные идентификаторы.

Вот как выглядят данные:

import datetime as dt

df = pd.DataFrame({
'Date': [dt.date(2017,9,1),dt.date(2017,9,21),dt.date(2017,9,14),
    dt.date(2017,11,7),dt.date(2017,8,1),dt.date(2017,12,21),
    dt.date(2017,12,14),dt.date(2017,10,1),dt.date(2017,10,1)],
'ID': [1,2,3,3,2,1,2,3,2],
})

    Date        ID
    2017-09-01  1
    2017-11-01  2
    2017-09-01  3
    2017-11-07  3
    2017-08-01  2
    2017-11-01  1
    2017-12-01  2
    2017-10-01  3
    2017-10-01  2

И я хочу получить результат, который выглядит следующим образом:

ID_1_mean  ID_1_sd  ID_2_mean   ID_2_sd ...
YYYY-MM-DD int      YYYY-MM-DD  int ...

где YYYY-MM-DD - среднее значение отдаты в группе 1, а int - это среднее в группе 1, повторяется для всех групп.

1 Ответ

0 голосов
/ 10 февраля 2019

Вот несколько неуклюжий обходной путь:

  1. Преобразование datetime.date в pandas.Timestamp с pd.to_datetime()
  2. Преобразование pandas.Timestamp в целое число с .astype(int)
  3. Вычислить среднее и стандартное для этих целых чисел
  4. Преобразовать среднее значение в pandas.Timestamp
  5. Преобразовать стандартное значение в pandas.Timedelta

Настройка:

df = pd.DataFrame({
'Date': [dt.date(2017,9,1),dt.date(2017,9,21),dt.date(2017,9,14),
    dt.date(2017,11,7),dt.date(2017,8,1),dt.date(2017,12,21),
    dt.date(2017,12,14),dt.date(2017,10,1),dt.date(2017,10,1)],
'ID': [1,2,3,3,2,1,2,3,2],
})

Решение:

df['Date_int'] = pd.to_datetime(df['Date']).astype(int)
res = df.groupby('ID').agg(['mean', 'std'])
res.columns = ['_'.join(c) for c in res.columns.values]

res['Date_mean'] = pd.to_datetime(res['Date_int_mean'])
res['Date_std'] = pd.to_timedelta(res['Date_int_std'])

res = res[['Date_mean', 'Date_std']]
res

             Date_mean                Date_std
ID                                            
1  2017-10-26 12:00:00 78 days 11:43:56.874291
2  2017-10-01 18:00:00 55 days 15:53:10.401720
3  2017-10-07 16:00:00 27 days 14:38:57.222514
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...