簡體   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