Добавление записей в столбцы даты и времени Pandas в Python

1

У меня есть набор данных, как показано ниже:

Value       Time         delta time 
2     2009-05-27 18:45     0:15:00
4     2009-05-27 19:00     0:15:00
1     2009-05-27 19:15     0:15:00
1     2009-05-27 19:30     0:15:00
2     2009-05-27 20:45     1:15:00

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

df['deltatime']= df['Date'].diff(periods=1)

Мне нужно добавить записи между записями, которые имеют дельта-время более 15 минут. Я хочу, чтобы код вне кода был чем-то вроде ниже с 0 значениями для добавленных записей:

Value     Time             delta time 
2      2009-05-27 18:45    0:15:00
4      2009-05-27 19:00    0:15:00
1      2009-05-27 19:15    0:15:00
1      2009-05-27 19:30    0:15:00
0      2009-05-27 19:45    0:15:00
0      2009-05-27 20:00    0:15:00
0      2009-05-27 20:15    0:15:00
0      2009-05-27 20:30    0:15:00
2      2009-05-27 20:45    0:15:00

Мне было интересно, может ли кто-нибудь помочь мне с этой проблемой?

Теги:
pandas
datetime

1 ответ

0
Лучший ответ

Способ 1: as.freq

new_df = df.set_index('Time').asfreq('15min', fill_value=0).reset_index()
new_df['delta time'] = new_df.Time.diff()

>>> new_df
                 Time  Value delta time
0 2009-05-27 18:45:00      2        NaT
1 2009-05-27 19:00:00      4   00:15:00
2 2009-05-27 19:15:00      1   00:15:00
3 2009-05-27 19:30:00      1   00:15:00
4 2009-05-27 19:45:00      0   00:15:00
5 2009-05-27 20:00:00      0   00:15:00
6 2009-05-27 20:15:00      0   00:15:00
7 2009-05-27 20:30:00      0   00:15:00
8 2009-05-27 20:45:00      2   00:15:00

Способ 2: resample

new_df= (df.resample('15min', on='Time').mean()
         .fillna(0)
         .reset_index()
         .assign(delta_time = lambda x: x.Time.diff()))

>>> new_df
                 Time  Value delta_time
0 2009-05-27 18:45:00    2.0        NaT
1 2009-05-27 19:00:00    4.0   00:15:00
2 2009-05-27 19:15:00    1.0   00:15:00
3 2009-05-27 19:30:00    1.0   00:15:00
4 2009-05-27 19:45:00    0.0   00:15:00
5 2009-05-27 20:00:00    0.0   00:15:00
6 2009-05-27 20:15:00    0.0   00:15:00
7 2009-05-27 20:30:00    0.0   00:15:00
8 2009-05-27 20:45:00    2.0   00:15:00
  • 0
    Когда я использую первый метод, он устанавливает все значения на ноль, но мне нужно просто установить сгенерированные значения на ноль. Вы знаете, почему это происходит?
  • 0
    Можете ли вы выслать мне способ чтения данных из CSV-файла, чтобы написать этот код? Я думаю, что это вопрос чтения данных. Когда я использую код (первый метод), он работает с моим длинным кодом, где я сгенерировал столбец datetime. Однако, когда я хочу проверить ut, как в примере, который я представил здесь, он устанавливает все значения на ноль. Разве дело в датах разбора?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню