Python / Pandas - статистика по времени и дате.Как агрегировать средства столбцов даты и времени - PullRequest
0 голосов
/ 15 мая 2019

В настоящее время я пишу конвейер «Разделить - применить - объединить» для анализа данных, который также включает даты. Вот некоторые примеры данных:

In [1]:
import pandas as pd
import numpy as np
import datetime as dt

startdate = np.datetime64("2018-01-01")
randdates = np.random.randint(1, 365, 100) + startdate

df = pd.DataFrame({'Type': np.random.choice(['A', 'B', 'C'], 100), 
                   'Metric': np.random.rand(100), 
                   'Date': randdates})
df.head()

Out[1]: 
  Type    Metric       Date
0    A  0.442970 2018-08-02
1    A  0.611648 2018-02-11
2    B  0.202763 2018-03-16
3    A  0.295577 2018-01-09
4    A  0.895391 2018-11-11

Теперь я хочу агрегировать по 'Type' и получить сводную статистику по соответствующим переменным. Это легко для числовых переменных, таких как 'Metric':

df.groupby('Type')['Metric'].agg(('mean', 'std'))

Однако для объектов даты и времени вычисление среднего значения, стандартного отклонения или другой статистики не имеет смысла и выдает ошибку. Контекст, для которого мне нужна эта операция, заключается в том, что я моделирую дату на основе некоторой метрики расстояния. Когда я повторяю это моделирование со случайной выборкой (симуляция Монте-Карло), я позже хочу переназначить среднее значение и доверительный интервал для смоделированных дат.

Итак, мой вопрос: какую полезную статистику можно построить с данными даты и времени? Как вы представляете статистическое распределение смоделированных дат? А как вы реализуете операцию агрегирования?

Мой идеальный вывод - получить столбцы Date_mean и Date_stdev, представляющие диапазон для моих смоделированных дат.

1 Ответ

0 голосов
/ 15 мая 2019

Вы можете использовать метки времени (Unix)

Эпоха, также известная как метки времени Unix, - это количество секунд (не миллисекунд!), Прошедших с 1 января 1970 года в 00:00:00 по Гринвичу (1970-01-01 00:00:00 по Гринвичу).

Вы можете конвертировать все ваши даты в метки времени, например:

import time
import datetime
d = "2018-08-02"
time.mktime(datetime.datetime.strptime(d, "%Y-%m-%d").timetuple()) #1533160800

И оттуда вы можете рассчитать, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...