【问题标题】:Create FY based on the range of date in pandas根据 pandas 中的日期范围创建 FY
【发布时间】:2019-04-15 21:03:21
【问题描述】:

我正在处理日期和财政年度。 我的工作数据集包含一万行日期。 我想创建一个新列来标识季节或财年。 示例数据框如下:

df = pd.DataFrame()
df['date'] = ['10/08/2018','12/09/2018','15/08/2017','16/05/2018']

我想做的是根据日期范围创建一个新列season。 例如, 如果日期的月份是从 8 月到 6 月,将被视为一个季节。 这意味着日期范围从 01/08/2005 到 30/06/2006,季节为 2005-06。

对于示例日期框架,预期输出如下:

  date      season
10/082018   2018-19
12/09/2018  2018-19
15/08/2017  2017-18
16/05/2018  2017-18

以下是我的预期输出:

如何定义范围和季节? 谢谢,

泽普。

【问题讨论】:

标签: python pandas date date-range


【解决方案1】:

您可以使用基于月份的条件,并在转换为字符串后将日期的年份部分连接起来

df.date = pd.to_datetime(df.date, format = '%d/%m/%Y')
cond = df.date.dt.month >=8
df['season'] = np.where(cond, df.date.dt.year.apply(str) + '-' + (df.date.dt.year+1).apply(str).str[2:], (df.date.dt.year-1).apply(str) + '-' + df.date.dt.year.apply(str).str[2:])


    date    season
0   2018-08-10  2018-19
1   2018-09-12  2018-19
2   2017-08-15  2017-18
3   2018-05-16  2017-18

【讨论】:

  • 感谢 Vaishali。我将日期转换为日期时间并得到以下格式。 time data Timestamp('2018-08-10 00:00:00') 如何从日期时间中删除时间部分?感谢您的帮助。
  • @Zephyr, df['date'].dt.date 会给你日期时间的日期部分
  • @Vaishali 我建议使用year = df.date.dt.year;year_str = df.date.dt.year.astype(str);np.where(cond,year_str + '-' + (year+1).astype(str).str[2:], (year-1).astype(str) + '-' + year_str.str[2:]) 来加快这个过程,因为你有很多中间相同的变量。
  • @SandeepKadapa,可能是您比较了给定行数的时间。在 df = pd.concat([df]*10000, ignore_index=True) 上试一下,时间是一样的。
  • @Vaishali 哦,这很有趣,谢谢你让我知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2021-07-22
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多