Проверьте, есть ли в моих данных индекса временных рядов пропущенные значения для дней недели - PullRequest
1 голос
/ 03 февраля 2020

У меня есть данные временного ряда от "5 января 2015" до "28 De c 2018". Я наблюдал некоторые даты рабочих дней и их значения отсутствуют. Как проверить, сколько дней недели пропущено в моем временном диапазоне? и каковы эти даты, чтобы я мог экстраполировать значения для этих дат.

Пример:

Date    Price    Volume
2018-12-28  172.0   800
2018-12-27  173.6   400
2018-12-26  170.4   500
2018-12-25  171.0   2200
2018-12-21  172.8   800

В календаре наблюдений 21-го числа c, 2018 год был пятницей. Затем, за исключением субботы и воскресенья, в наборе данных должно быть «24th De c 2018», но его нет. Мне нужно определить такие пропущенные даты из диапазона.

Мой подход до сих пор: я пытался использовать

pd.date_range('2015-01-05','2018-12-28',freq='W')

, чтобы определить количество недель и рассчитать число. будни из них вручную, чтобы определить количество пропущенных дат. Но это не решило цели, так как мне нужно определить пропущенные даты из диапазона.

1 Ответ

2 голосов
/ 03 февраля 2020

Допустим, это ваш полный набор данных:

Date    Price    Volume
2018-12-28  172.0   800
2018-12-27  173.6   400
2018-12-26  170.4   500
2018-12-25  171.0   2200
2018-12-21  172.8   800

И dates были:

dates = pd.date_range('2018-12-15', '2018-12-31')

Сначала убедитесь, что столбец Дата на самом деле является типом даты:

df['Date'] = pd.to_datetime(df['Date'])

Затем установите Date в качестве индекса:

df = df.set_index('Date')

Затем переиндексируйте с помощью решения unutbu :

df = df.reindex(dates, fill_value=0.0)

Затем сбросьте индекс, чтобы сделать с ним стало проще работать:

df = df.reset_index()

Теперь это выглядит следующим образом:

        index  Price  Volume
0  2018-12-15    0.0     0.0
1  2018-12-16    0.0     0.0
2  2018-12-17    0.0     0.0
3  2018-12-18    0.0     0.0
4  2018-12-19    0.0     0.0
5  2018-12-20    0.0     0.0
6  2018-12-21  172.8   800.0
7  2018-12-22    0.0     0.0
8  2018-12-23    0.0     0.0
9  2018-12-24    0.0     0.0
10 2018-12-25  171.0  2200.0
11 2018-12-26  170.4   500.0
12 2018-12-27  173.6   400.0
13 2018-12-28  172.0   800.0
14 2018-12-29    0.0     0.0
15 2018-12-30    0.0     0.0
16 2018-12-31    0.0     0.0

Do:

df['weekday'] = df['index'].dt.dayofweek

Наконец, сколько рабочих дней пропущено в вашем диапазон времени:

missing_weekdays = df[(~df['weekday'].isin([5,6])) & (df['Volume'] == 0.0)]

Результат:

>>> missing_weekdays
        index  Price  Volume  weekday
2  2018-12-17    0.0     0.0        0
3  2018-12-18    0.0     0.0        1
4  2018-12-19    0.0     0.0        2
5  2018-12-20    0.0     0.0        3
9  2018-12-24    0.0     0.0        0
16 2018-12-31    0.0     0.0        0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...