我正在研究一个25000行以上的数据框架。数据跨度为2012年至2021年。在这里,我有一个专栏日期。我想创建另一个名为assessmentYear(AY)的列,其中应该使用日期列中的年和月来创建值。每个课税年度从每年的10月开始,至次年5月结束。我用了pandas。dt。年,还有熊猫。Month_name用于检索这些值以分隔列。但是,我无法根据评估周期在AY列(AY1, AY2, AY3..)中存储值。
我在下面的代码片段中分享日期列作为字典的示例。
{
1: '2019-09-19',
2: '2019-09-20',
3: '2019-10-29',
4: '2019-10-30',
5: '2020-04-01',
6: '2020-04-02',
7: '2020-04-03',
8: '2020-04-04',
9: '2020-11-05',
10: '2020-11-06',
11: '2020-11-07',
12: '2020-11-08',
13: '2020-11-09',
14: '2021-04-10',
15: '2021-04-11',
16: '2021-04-12',
}
在上面的字典中向上到第2行应该分配一个值AY1,然后向上到它是AY2,剩下的行应该分配一个值AY3在列AY。而不是依赖于索引,我希望实现这个基于日期列,因为日期是动态变化的真实数据集。如果你能帮助我处理这个问题,我将不胜感激。
使用to_period
转换为季度,qyear
转换为财政年度:
fyear = pd.to_datetime(df['Date']).dt.to_period('Q-SEP').dt.qyear
df['AY'] = 'AY' + df.groupby(fyear).ngroup().add(1).astype(str)
print(df)
# Output
Date AY
1 2019-09-19 AY1
2 2019-09-20 AY1
3 2019-10-29 AY2
4 2019-10-30 AY2
5 2020-04-01 AY2
6 2020-04-02 AY2
7 2020-04-03 AY2
8 2020-04-04 AY2
9 2020-11-05 AY3
10 2020-11-06 AY3
11 2020-11-07 AY3
12 2020-11-08 AY3
13 2020-11-09 AY3
14 2021-04-10 AY3
15 2021-04-11 AY3
16 2021-04-12 AY3