我有以下数据框:
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]
答案 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