2016-03-29 3 views
3

У меня есть следующий кадр данных:итерацию по каждому индексу элемента уровня = 1 в многоиндексных панд

import pandas as pd 
import datetime as dt 
from dateutil.rrule import rrule, MONTHLY 

df = pd.DataFrame({ 
'value' : [4,2,5,6,7,8,6,5,4,1,2,4], 
'date': fread_year_month(dt.datetime(2015, 1, 1),dt.datetime(2015, 12, 1)), 
'stock': ['amzn']*12 
},columns=[ 
'value', 'date', 'stock']) 

df2 = pd.DataFrame({ 
'value' : [1]*11, 
'date': fread_year_month(dt.datetime(2015, 1, 1),dt.datetime(2015, 11, 1)), 
'stock': ['msft']*11 
},columns=[ 
'value', 'date', 'stock']) 

df = df.append(df2) 

df.set_index(['stock', 'date'], inplace=True) 

def fread_year_month(strt_dt, end_dt): 
    dates = [dt for dt in rrule(MONTHLY, dtstart=strt_dt, until=end_dt)] 
    return dates 

Я хочу, чтобы вставить столбец в этот кадр данных, который имеет количество дней в году -месяц, связанный с соответствующим уровнем индекса = 1.

Я не уверен, как проходить через каждое значение индекса в level = 1.

Если я могу понять, как перебрать каждый элемент уровня = 1, то я могу просто сделать следующее:

calendar.monthrange(x.year, x.month)[1] 

ответ

1

является то, что вы хотите?

In [89]: df['days'] = df.index.get_level_values('date').days_in_month 

In [90]: df 
Out[90]: 
        value days 
stock date 
amzn 2015-01-01  4 31 
     2015-02-01  2 28 
     2015-03-01  5 31 
     2015-04-01  6 30 
     2015-05-01  7 31 
     2015-06-01  8 30 
     2015-07-01  6 31 
     2015-08-01  5 31 
     2015-09-01  4 30 
     2015-10-01  1 31 
     2015-11-01  2 30 
     2015-12-01  4 31 
msft 2015-01-01  1 31 
     2015-02-01  1 28 
     2015-03-01  1 31 
     2015-04-01  1 30 
     2015-05-01  1 31 
     2015-06-01  1 30 
     2015-07-01  1 31 
     2015-08-01  1 31 
     2015-09-01  1 30 
     2015-10-01  1 31 
     2015-11-01  1 30 
+0

Ничего себе, это было быстро. Отлично. Спасибо, что это прекрасно. – codingknob

+0

@codingknob, рад, что я мог бы помочь :) – MaxU

Смежные вопросы