Как перебирать многоиндексные строки? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть следующие данные:

                     Adj Close  year  
Date       month day                   
1989-01-03 1     3     1.164242  1989  
1989-01-04 1     4     1.211100  1989  
1989-01-05 1     5     1.218310  1989  
1989-01-06 1     6     1.229123  1989  
1989-01-09 1     9     1.239936  1989  
...                         ...   ...  
2007-01-25 1     25   10.753074  2007  
2007-01-26 1     26   10.644608  2007  
2007-01-29 1     29   10.714428  2007  
2007-01-30 1     30   10.665804  2007  
2007-01-31 1     31   10.688246  2007  

Есть три индекса, но я хочу перебрать 2 значения индекса месяц и день. Я хочу найти и сохранить данные примерно так:

за месяц 1 найти .mean () всего дня 1 над Adj Закрыть

это должно быть сделано длявсе дни месяца с 1 по 12.

Как я могу это сделать?

1 Ответ

1 голос
/ 04 ноября 2019

IIUC,

Вот 5 лет фиктивных данных и корректировок для соответствия вашему входному фрейму данных:

df = pd.DataFrame({'Adj Close':np.random.randint(20,100, 365*5+1)}, index=pd.date_range('2011-01-01', periods=365*5+1))
​
df = df.set_index([df.index.month, df.index.day], append=True).rename_axis(['Date','month','day'])\
  .assign(year=df.index.year)
​

Используя groupby, вы можете возвращать 366 дней в году (один год имеетдата прыжка)

df.groupby(['month','day'])['Adj Close'].mean()

Вывод:

month  day
1      1      56.6
       2      53.8
       3      48.0
       4      53.6
       5      70.4
              ... 
12     27     67.2
       28     48.2
       29     74.6
       30     61.0
       31     66.2
Name: Adj Close, Length: 366, dtype: float64
...