【问题标题】:Python - Get policy year from datetime dataframePython - 从日期时间数据框中获取保单年份
【发布时间】:2020-12-10 22:01:27
【问题描述】:

我有一个数据框 (df),其中有一列日期时间格式为 YYYY-MM-DD(“日期”)。我正在尝试创建一个新列来返回保单年度,该保单年度始终从 4 月 1 日开始,因此 1 月至 3 月的保单年度将始终是前一个日历年。有些日期相当陈旧,因此为下面的样本量设置单独的日期范围并不理想

数据框看起来像这样

df['date']

    2020-12-10
    2021-02-10 
    2019-03-31

输出应该是这样的

2020 
2020 
2018

我现在知道如何使用df['date'].dt.year 获取年份。但是,我无法将数据框每年转换为相应的保单年度,以便 if df['date'].dt.month >= 4 然后 df['date'].dt.year, else df['date'].dt.year - 1

我不太确定如何准确设置它。我一直在尝试避免设置多个列来为 month >= 4 执行 bool,然后设置不同的列。我已经设置了这个但是得到 ValueError 说明这个系列太模棱两可了

def PolYear(x):
  y = x.dt.month
  if y >= 4:
    x.dt.year
  else:
    x.dt.year - 1

df['Pol_Year'] = PolYear(df['date'])

我不确定这是否是正确的方法,因此我还尝试了 >= 和

我之前提到过“会计年度”,但这是不正确的。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    Quang Hoand 的想法是正确的,但在调用to_period(self, freq) 时使用了错误的频率。出于您的目的,您希望使用以下代码:

    df.date.dt.to_period('Q-MAR').dt.qyear
    

    这会给你:

    0    2021
    1    2021
    2    2019
    Name: date, dtype: int64
    

    Q-MAR 定义财政年度在 3 月结束

    这些值是正确的会计年度(会计年度使用结束的年份,而不是开始的年份[reference])。如果您想使用它们开始的年份来获得输出,这很简单:

    df.date.dt.to_period('Q-MAR').dt.qyear - 1
    

    给你

    0    2020
    1    2020
    2    2018
    Name: date, dtype: int64
    

    qyear docs

    【讨论】:

      【解决方案2】:

      这是qyear:

      df.date.dt.to_period('Q').dt.qyear
      

      输出:

      0    2020
      1    2021
      2    2019
      Name: date, dtype: int64
      

      【讨论】:

        猜你喜欢
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 1970-01-01
        • 2010-11-11
        • 2011-04-02
        • 2010-09-07
        • 1970-01-01
        相关资源
        最近更新 更多