迭代多索引pandas中level = 1中的每个索引项

时间:2016-03-29 18:13:59

标签: python pandas multi-index

我有以下数据框:

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中的每个索引值。

如果我能弄清楚如何遍历level = 1中的每个项目,那么我可以简单地执行以下操作:

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

1 个答案:

答案 0 :(得分: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