繁体   English   中英

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

[英]iterate through each index item in level=1 in multi-index pandas

我有以下数据框:

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]

那是你要的吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM