#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