Pandas поворачивает фрейм данных по годам

#python #pandas #pivot-table

#python #pandas #сводная таблица

Вопрос:

Я хотел бы повернуть фрейм данных следующим образом:

  • У меня есть почасовой фрейм данных на несколько лет в длинном формате с переменной V1

  • Я хотел бы иметь столбец для каждого года переменной V1

      date  = ['2015-02-03 21:00:00','2015-02-03 22:30:00','2016-02-03 21:00:00','2016-02-03   22:00:00']
     value_column = [33.24  , 500  , 34.39  , 34.49 ]
    
     df = pd.DataFrame({'V1':value_column}, index=pd.to_datetime(date))
    
     print(df.head())
    
                        V1 
     index                                     
     2015-02-03 21:00:00  33.24   
     2015-02-03 22:30:00  500   
     2016-02-03 21:00:00  34.39   
     2016-02-03 22:00:00  34.49   
      

Ожидаемый результат:

                 V1_2015  V1_2016
02-03 21:00:00    33.24     33.49
02-03 22:00:00    500       33.49
  

До сих пор я пробовал это, что приближает меня, но не там:

 df['year'] = df.index.year
df=df.set_index(['year'],append=True)
df=df.unstack(level=1)

                         V1
                         2015    2016
    2015-02-03 21:00:00  33.24   
    2015-02-03 22:00:00  500   
    2016-02-03 21:00:00          34.39   
    2016-02-03 22:00:00          34.49   
  
  

В принципе, я хотел бы выровнять дневные часы месяца, чтобы переменную V1 можно было сравнивать по разным годам. Есть идеи, как это сделать эффективно?

Спасибо

Ответ №1:

Попробуйте преобразовать индекс в строку, чтобы вы могли удалить год и минуты следующим образом:

 df['year']=df.index.year

df.reset_index(inplace=True)

df['index']=df['index'].astype(str).apply(lambda x: x[5:13])

df.set_index('index',inplace=True)
df.pivot(columns='year')
  

вывод:

               V1       
year        2015   2016
index                  
02-03 21   33.24  34.39
02-03 22  500.00  34.49