#python #time-series
#python #временные ряды
Вопрос:
У меня есть набор данных об осадках следующего формата.
ГОД ЯНВАРЬ ФЕВРАЛЬ МАРТ АПРЕЛЬ МАЙ ИЮНЬ ИЮЛЬ АВГУСТ СЕНТЯБРЬ ОКТЯБРЬ НОЯБРЬ ДЕКАБРЬ
1901 2.7 0.4 4.7 10.0 13.0 16.9 19.2 18.3 15.7 10.6 4.9 3.5
1902 4.1 3.2 7.5 10.3 10.0 15.1 18.2 17.4 15.0 10.2 6.3 3.5
1903 3.8 5.9 7.6 7.1 12.9 14.9 17.6 17.3 15.5 12.1 6.9 2.7
1904 3.0 4.6 5.5 10.3 13.6 16.3 20.2 18.5 13.9 11.2 5.4 4.8
1905 1.7 4.0 7.4 9.3 11.9 16.5 20.0 17.6 14.7 8.4 5.5 3.8
Мне нужно, чтобы он был в следующем формате, чтобы выполнять прогнозирование временных рядов в python.
ДАТА ВЫПАДЕНИЯ ОСАДКОВ
1901-01-01 2.7
1901-02-01 0.4
1901-03-01 4.7
1901-04-01 10.0
Столбец «ДАТА» должен иметь тип данных datetime, а столбец «КОЛИЧЕСТВО ОСАДКОВ» должен содержать значение количества осадков за определенный месяц года.
Пожалуйста, помогите мне с выполнением этого преобразования.
Комментарии:
1. Это довольно просто для кодирования; с каким аспектом этого у вас возникли проблемы?
Ответ №1:
Я предполагаю, что ваш фрейм данных уже создан, поэтому в приведенном ниже описании этот шаг (и импорт) опущен.
Начните с определения функции, которая будет применена позже, для создания DATE
столбца из YEAR
и MONTH
столбцов:
def cnv(row):
datStr = '01 ' row.MONTH ' ' str(row.YEAR)
return pd.to_datetime(datStr, format='%d %b %Y').date()
Затем действуйте следующим образом:
-
Создайте второй фрейм данных с
YEAR
названием месяца в качестве MultiIndex:df2 = df.set_index('YEAR').stack().to_frame(name='RAINFALL')
-
Преобразуйте мультииндекс в обычные столбцы, переименовав (безымянный в оригинале
Многоиндексный) level_1 кMONTH
:df2 = df2.reset_index().rename(columns={'level_1': 'MONTH'})
-
Создайте
DATE
столбец, применив созданную выше функцию:df2['DATE'] = df2.apply(cnv, axis=1)
-
И, наконец, удалите столбцы
YEAR
иMONTH
и измените порядок столбцов:df2 = df2.drop(['YEAR', 'MONTH'], axis=1).sort_index(axis=1)
Два первых шага могут быть объединены в одну инструкцию, но я намеренно
написал их отдельно, чтобы упростить тестовую распечатку промежуточных результатов.