数据帧上的Python多级索引。访问第一个索引级别的第一行以应用函数
我有一个多级索引数据帧。级别1索引包含唯一键,级别2索引包含级别1索引的日期 代码: 期望的结果是,对于级别1索引(groupby)的开始,为数据帧分配一个新变量,该数据帧包含基于第二级索引中的值的季度。如何专门访问groupby一级索引,并应用一个函数来评估二级索引以生成季度 如图所示,右侧面板是数据帧的预期结果 用于提取第二级并添加: 如果希望始终从数据帧上的Python多级索引。访问第一个索引级别的第一行以应用函数,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,我有一个多级索引数据帧。级别1索引包含唯一键,级别2索引包含级别1索引的日期 代码: 期望的结果是,对于级别1索引(groupby)的开始,为数据帧分配一个新变量,该数据帧包含基于第二级索引中的值的季度。如何专门访问groupby一级索引,并应用一个函数来评估二级索引以生成季度 如图所示,右侧面板是数据帧的预期结果 用于提取第二级并添加: 如果希望始终从0开始添加: import pandas as pd from dateutil.relativedelta import relativede
0
开始添加:
import pandas as pd
from dateutil.relativedelta import relativedelta
from datetime import datetime
fake_data=pd.DataFrame([(x,pd.to_datetime('04/01/2020')+relativedelta(months=y)) for x in list(range(0,11)) for y in list(range(0,11))],columns=['x','y'])
fake_data['z']=fake_data['x']*np.random.uniform(low=1,high=1000)
fake_data.set_index(['x','y'],drop=True,inplace=True)
fake_data['qtr'] = fake_data.index.get_level_values(1).quarter
print (fake_data.head(20))
z qtr
x y
0 2020-04-01 0.000000 2
2020-05-01 0.000000 2
2020-06-01 0.000000 2
2020-07-01 0.000000 3
2020-08-01 0.000000 3
2020-09-01 0.000000 3
2020-10-01 0.000000 4
2020-11-01 0.000000 4
2020-12-01 0.000000 4
2021-01-01 0.000000 1
2021-02-01 0.000000 1
1 2020-04-01 983.538088 2
2020-05-01 983.538088 2
2020-06-01 983.538088 2
2020-07-01 983.538088 3
2020-08-01 983.538088 3
2020-09-01 983.538088 3
2020-10-01 983.538088 4
2020-11-01 983.538088 4
2020-12-01 983.538088 4
fake_data['qtr'] = pd.factorize(fake_data.index.get_level_values(1).quarter)[0]
print (fake_data.head(20))
z qtr
x y
0 2020-04-01 0.000000 0
2020-05-01 0.000000 0
2020-06-01 0.000000 0
2020-07-01 0.000000 1
2020-08-01 0.000000 1
2020-09-01 0.000000 1
2020-10-01 0.000000 2
2020-11-01 0.000000 2
2020-12-01 0.000000 2
2021-01-01 0.000000 3
2021-02-01 0.000000 3
1 2020-04-01 80.286425 0
2020-05-01 80.286425 0
2020-06-01 80.286425 0
2020-07-01 80.286425 1
2020-08-01 80.286425 1
2020-09-01 80.286425 1
2020-10-01 80.286425 2
2020-11-01 80.286425 2
2020-12-01 80.286425 2