Нахождение пропущенных временных интервалов по данным - PullRequest
0 голосов
/ 25 апреля 2018

Если у меня есть список дат в CSV-файле, я хочу найти и добавить недостающие интервалы в одном часовом интервале дня.

Данные выглядят следующим образом:

id  city     reading date 
33  US-Ohio  06/18/2011 23:00:00  
33  US-Ohio  06/19/2011 00:00:00  
33  US-Ohio  06/19/2011 01:00:00  
33  US-Ohio  06/19/2011 02:00:00  
33  US-Ohio  06/19/2011 06:00:00  
33  US-Ohio  06/19/2011 07:00:00  
33  US-Ohio  06/19/2011 08:00:00  
34  US-NYC   06/19/2011 06:00:00  
34  US-NYC   06/19/2011 08:00:00

Итак, недостающие данные, которые нужно вставить:

id  city     reading date 
33  US-Ohio  06/18/2011 23:00:00  
33  US-Ohio  06/19/2011 00:00:00  
33  US-Ohio  06/19/2011 01:00:00  
33  US-Ohio  06/19/2011 02:00:00  
             06/19/2011 03:00:00  
             06/19/2011 04:00:00  
33  US-Ohio  06/19/2011 06:00:00  
33  US-Ohio  06/19/2011 07:00:00  
33  US-Ohio  06/19/2011 08:00:00  
34  US-NYC   06/19/2011 06:00:00  
             06/19/2011 07:00:00  
34  US-NYC   06/19/2011 08:00:00  

Я уже преобразовал их в datetime, используя pandas, используя код:

games['reading_date'] =  pd.to_datetime(games['reading_date'], format='%m/%d/%y %H:%M')

Даты повторяются, поэтому установка индекса и повторная выборка не работают, потому что в разных городах разное время пропуска и индекс повторяется несколько раз, мне просто нужно добавить эти пропущенные почасовые интервалы и оставить все остальные столбцы пустыми.Как мне сделать это в Python?

1 Ответ

0 голосов
/ 25 апреля 2018

обновленный ответ для обновленного набора данных:

сгруппируйте по идентификатору и городу и примените функцию asfreq.

df.groupby(['id', 'city'], as_index=False).apply(lambda x: x.set_index('reading date').asfreq('1H').reset_index())

# outputs:

                         id      city
  reading date
0 2011-06-18 23:00:00  33.0   US-Ohio
  2011-06-19 00:00:00  33.0   US-Ohio
  2011-06-19 01:00:00  33.0   US-Ohio
  2011-06-19 02:00:00  33.0   US-Ohio
  2011-06-19 03:00:00   NaN       NaN
  2011-06-19 04:00:00   NaN       NaN
  2011-06-19 05:00:00   NaN       NaN
  2011-06-19 06:00:00  33.0   US-Ohio
  2011-06-19 07:00:00  33.0   US-Ohio
  2011-06-19 08:00:00  33.0   US-Ohio
1 2011-06-19 06:00:00  34.0    US-NYC
  2011-06-19 07:00:00   NaN       NaN
  2011-06-19 08:00:00  34.0    US-NYC

edit: оригинальный ответ

Убедитесь, чтоColumn 1 - это дата и время.

Затем установите индекс на «Столбец 1» и используйте pandas.DataFrame.asFreq

df['Column 1'] = pd.to_datetime(df['Column 1'])

df.set_index('Column 1').asfreq('1H')

# Returns:

                    Column 2
Column 1
2011-06-18 23:00:00        a
2011-06-19 00:00:00      NaN
2011-06-19 01:00:00        b
2011-06-19 02:00:00        c
2011-06-19 03:00:00      NaN
2011-06-19 04:00:00      NaN
2011-06-19 05:00:00        d
2011-06-19 06:00:00      NaN
2011-06-19 07:00:00        e
2011-06-19 08:00:00        f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...