gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:23:49 43 4
gpt4 key购买 nike

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

代码:

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)

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

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

Desired Results

最佳答案

使用MultiIndex.get_level_values对于提取第二级并添加 DatetimeIndex.quarter :

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

如果希望始终以 0 开头,请添加 factorize :

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

关于DataFrame 上的 Python 多级索引。访问第一个索引级别的第一行以应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60261724/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com