python - 基于 'date' 列的月份和年份的列值

标签 python pandas date

我正在处理一个超过 25000 行的数据框。数据跨度为 2012 年至 2021 年。其中我有一个列日期。我想创建另一个名为assessmentYear(AY) 的列,其中应使用日期列中的年份和月份来创建值。每个评估年度从当年的10月开始,到次年5月结束。我使用 pandas.dt.year 和 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,其余行应在 AY 列中分配值 AY3。我不依赖索引,而是希望基于日期列来实现这一点,因为日期在实际数据集中动态变化。如果您能帮助我解决此问题,我将不胜感激。

最佳答案

使用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

关于python - 基于 'date' 列的月份和年份的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73009383/

相关文章:

python - 如何使用 Pytesseract 提取图像中的小数

python - Pandas:如何按月和年过滤并按分组id返回最大值?

PHP - 从时间戳获取毫秒

python - 嵌套字典字段中的前夕 0.8 `allow_unknown`

python - 带有 Python 的 Chrome 应用程序?

python - 如何获取 Datetime 的完整日期长度

Python时区解析

mysql - SQL - 仅获取当年的结果

python - 从日期时间列表中提取天、小时和秒

python - 如何交换 2 个 pandas 数据帧中的行?