Разделить индексированный по дате фрейм данных на фрейм данных с ежемесячными столбцами, содержащими соответствующие значения - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть датафрейм, содержащий месячные значения осадков, проиндексированные по дате. Вот короткий фрагмент:

      date  ppt
      ...
2016-11-30  253.379993
2016-12-31  52.709998
2017-01-31  9.030000
2017-02-28  10.050000
2017-03-31  16.560000
2017-04-30  45.509998
2017-05-31  103.829997
      ...

Мне нужно создать новый фрейм данных со столбцами для каждого месяца, содержащие значения для каждого соответствующего месяца в течение периода изучения (20 лет).

... * например 1006 *

    Jan   Feb    Mar   Apr   May  ...  
0   
1
2
3
4
5
...

Может кто-нибудь помочь?

Спасибо!

EDIT:

Я пробовал это до сих пор:

df.pivot_table(index=df.date.dt.year, columns=df.date.dt.month, values='ppt')

Но он возвращает эту ошибку, несмотря на то, что я явно установил индекс как datetime ...

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-49-9cc1ff01344d> in <module>()
     29 Trmm_1M.index = pd.to_datetime(Trmm_1M.index)
     30 
---> 31 TRMM_MONTHS = Trmm_1M.pivot_table(index=Trmm_1M.date.dt.year, columns=Trmm_1M.date.dt.month, values='ppt3')
 32 
 33 # Trmm_1M

~/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in __getattr__(self, name)
   3079             if name in self._info_axis:
   3080                 return self[name]
-> 3081             return object.__getattribute__(self, name)
   3082 
   3083     def __setattr__(self, name, value):

AttributeError: 'DataFrame' object has no attribute 'date'

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Использование pivot_table:

df.pivot_table(index=df.date.dt.year, columns=df.date.dt.month, values='ppt')

date    1      2      3          4           5           11         12
date
2016   NaN    NaN    NaN        NaN         NaN  253.379993  52.709998
2017  9.03  10.05  16.56  45.509998  103.829997         NaN        NaN
0 голосов
/ 12 сентября 2018

После того, как я не смог выполнить вышеупомянутые предложения, мне удалось найти обходной путь.Хотя это включает в себя больше шагов, разочарование неспособностью выяснить, что было неправильно, намного превосходит усилия дополнительных строк кода ...

df['M'] = df.index.month  #extracting month and years and creating new columns
df['Y'] = df.index.year
df_pivot = df.pivot_table(index=df.Y, columns=df.M, values='ppt') #pivot with these columns, rather than the index

Тем не менее, спасибо за ваши предложения, все:)

0 голосов
/ 12 сентября 2018

Назначьте столбец для месяца и года и используйте pivot:

df.assign(month=df.date.dt.month,year=df.date.dt.year).pivot('year','month','ppt')

В вашем случае это дает:

month    1      2      3          4           5           11         12
year                                                                   
2016    NaN    NaN    NaN        NaN         NaN  253.379993  52.709998
2017   9.03  10.05  16.56  45.509998  103.829997         NaN        NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...