Измените индекс в фрейме данных pandas и добавьте дополнительный столбец времени

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных pandas, который в настоящее время не имеет определенного индекса (таким образом, при печати создается автоматический индекс, который начинается с 0). Теперь я хотел бы иметь индекс «временного интервала», который начинается с 1, и дополнительный столбец «время суток» во фрейме данных. Здесь вы можете увидеть скриншот того, как должен выглядеть выходной csv. Можете ли вы сказать мне, как это сделать?

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

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

1. Я не понизил голос, но, пожалуйста, не могли бы вы обновить свой пост с помощью входного фрейма данных в виде обычного текста (только левый фрейм данных)?

Ответ №1:

Попробуйте с pd.date_range :

 df['time of day'] = pd.date_range('1970-1-1', periods=len(df), freq='H')   .strftime('%H:%M')  

Установка:

 df = pd.DataFrame(np.random.randint(1, 50, (30, 2)), columns=['Column 1', 'Column 2']) df.insert(0, 'time of day', pd.date_range('1970-1-1', periods=len(df), freq='H').strftime('%H:%M')) df.index.name = 'timeslot' df.index  = 1 print(df)  # Output:  time of day Column 1 Column 2 timeslot  1 00:00 43 33 2 01:00 20 11 3 02:00 40 10 4 03:00 19 28 5 04:00 10 27 6 05:00 27 10 7 06:00 1 10 8 07:00 33 36 9 08:00 32 2 10 09:00 23 32 11 10:00 1 17 12 11:00 48 42 13 12:00 21 3 14 13:00 48 28 15 14:00 41 46 16 15:00 48 43 17 16:00 47 6 18 17:00 33 21 19 18:00 38 19 20 19:00 17 40 21 20:00 8 24 22 21:00 28 22 23 22:00 2 13 24 23:00 24 3 25 00:00 4 1 26 01:00 8 9 27 02:00 19 36 28 03:00 30 36 29 04:00 43 39 30 05:00 43 3  

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

1. Спасибо за ваш комментарий, Корралиен. На самом деле у меня есть 2 замечания: 1) Как я могу переместить новый созданный фрейм данных на вторую позицию (должен быть второй столбец) 2) Как я могу дать имя первому столбцу?

2. @PeterBe. Я обновил свой ответ. Не могли бы вы проверить мою демо-версию, пожалуйста? Это то, чего ты ожидаешь?

3. Большое спасибо за вашу огромную помощь. Я проголосовал за ваш ответ и принял его. Просто из любопытства: почему вы указываете 1970-1-1 , например, дату, а не текущую дату?

4. Кажется излишним использовать datetime только для преобразования int в строку :p

5. @PeterBe. Дата не имеет значения, потому что мы сохраняем только время.

Ответ №2:

Предполагая, что ваш фрейм данных df :

 df['time of day'] = df.index.astype(str).str.rjust(2, '0') ':00' df.index  = 1  

вывод: Вывод отсутствует, так как ввод текста не был предоставлен

если имеется более 24 строк:

 df['time of day'] = (df.index$).astype(str).str.rjust(2, '0') ':00' df.index  = 1