#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