#python #arrays #pandas #datetime #time
#python #массивы #pandas #дата и время #время
Вопрос:
У меня есть фрейм данных, который выглядит следующим образом:
date data
2013-09-03 10
2013-09-04 9
2013-10-03 14
2014-09-02 13
2015-08-07 12
2016-09-02 17
Затем я применяю приведенный ниже код, чтобы выбрать только месяц 9
import pandas as pd
import datetime as dt
df= df[df['Date'].dt.month == 9] # select only the 9th month
Это дает мне следующее:
date data
2013-09-03 10
2013-09-04 9
2014-09-02 13
2016-09-02 17
Но я пытаюсь создать столбец для каждого выбранного 9-го месяца, чтобы он мог стать отдельным столбцом:
date data 2013 2014 2016
2013-09-03 10 10
2013-09-04 9 9
2014-09-07 13 13
2016-09-08 17 17
Я думаю, что я должен использовать dt.функция year в цикле for для создания столбца для каждого года, но я думаю, что в pandas может быть более простое решение?
Ответ №1:
Вы можете попробовать crosstab
s = pd.crosstab(index=df.index,columns=df.date.dt.year,values=df.data,aggfunc='sum').fillna('')
df = df.join(s)
df
Out[45]:
date data 2013 2014 2016
0 2013-09-03 10 10
1 2013-09-04 9 9
2 2014-09-02 13 13
3 2016-09-02 17 17