Pandas, сортировка по месяцам и создание нового столбца для каждого года

#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