Добавление столбца даты для часовых данных

#python #pandas

#python #панды

Вопрос:

У меня есть часовые необработанные данные за месяц. Я знаю дату начала, но я хочу создать фрейм данных и добавить столбец даты для каждой строки.
Я знаю, что могу создать фрейм данных даты, используя

df = pd.date_range('25/08/2020', periods = 10, freq ='D')

Но я хочу, чтобы он соответствовал этим часовым данным. Время в 24-часовом формате. Как я смогу этого добиться. Прикрепление изображения данных

введите описание изображения здесь

Редактировать 1: время начала не фиксировано. Поскольку данные представлены в 24-часовом формате, любая строка после 23:59 будет обрабатываться как следующий день.
Вот ожидаемый результат.

 | Date       | Time  |       
|------------|-------|       
| 01/01/2020 | 23:45 |       
| 02/01/2020 | 00:01 |       
| 02/01/2020 | 22:45 |       
| 03/01/2020 | 01:30 |       
  

Заранее благодарю вас.

Комментарии:

1. Есть ли у вас какая-либо информация о том, какое время соответствует какому дню месяца? Или ваша серия начинается в 0:00:00 в первый день месяца?

2. пожалуйста , добавьте свои данные в виде текста, а не изображения, с ожидаемым результатом.

Ответ №1:

Предполагая, что у вас есть фрейм данных со строками времени:

     Time         
1  23:45         
2  00:01         
3  22:45         
4  01:30   
  

Что нам нужно измерить, так это изменение в днях, а затем применение скользящей кумулятивной суммы.

Давайте приведем это к объекту datetime и измерим a diff() на основе строки выше:

 days = (pd.to_datetime(df['Time'],format='%H:%M')
                                 .diff() / np.timedelta64(1,'D')).lt(0).astype(int).cumsum() 
print(days)
1    0
2    1
3    1
4    2
Name: Time, dtype: int32
  

Теперь нам просто нужно увеличить количество дней на вашу начальную дату, для этого нам нужно преобразовать Days серию в объект timedelta, указав единицу измерения как дни. D

 df['Date'] = pd.Timestamp('01 Jan 2020')    pd.to_timedelta(days,unit='D')

        Date   Time         
1 2020-01-01  23:45         
2 2020-01-02  00:01         
3 2020-01-02  22:45         
4 2020-01-03  01:30