Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据帧上的Python多级索引。访问第一个索引级别的第一行以应用函数_Python_Pandas_Dataframe_Indexing - Fatal编程技术网

数据帧上的Python多级索引。访问第一个索引级别的第一行以应用函数

数据帧上的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

我有一个多级索引数据帧。级别1索引包含唯一键,级别2索引包含级别1索引的日期

代码:

期望的结果是,对于级别1索引(groupby)的开始,为数据帧分配一个新变量,该数据帧包含基于第二级索引中的值的季度。如何专门访问groupby一级索引,并应用一个函数来评估二级索引以生成季度

如图所示,右侧面板是数据帧的预期结果

用于提取第二级并添加:

如果希望始终从
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