【问题标题】:How to select data from the last four complete quarters of a timeseries with Pandas?如何使用 Pandas 从时间序列的最后四个完整季度中选择数据?
【发布时间】:2017-06-23 01:45:59
【问题描述】:

假设我有一个日期时间索引的数据框,该索引涵盖上一个财政年度和当前财政年度的一天(从 4 月 1 日开始):

           Units
date
2016-01-01   8734   
2016-06-30   6120
2016-09-30   7346
2016-12-31   5925
2016-03-31   7542
2016-06-30   9916
2016-09-30   9547
2016-12-31   8063
2017-01-01   7000
2017-03-31   5672
2017-04-01   7856

我希望能够选择最后四个季度的数据 - 在这种情况下忽略第一行和最后一行。

我知道我可以通过切片来做到这一点,因此:

df["2016-04-01":"2017-03-31"]

什么是最优雅的 - pythonic - 以编程方式根据最后四个完整季度过滤数据的解决方案?

【问题讨论】:

  • 我认为你可以这样做,df.date >="2016-04-01" & df.date < "2017-03-31"
  • 抱歉,我不得不调整一下这个问题。我的意思是编程,因为我很想留下一个我不想每次都调整的脚本。
  • 您的意思是只考虑 01-01 到 03-31 期间吗? 04-01 至 06-31; 07-01 到 09-31 和 10-01 到 12-31 作为季度,还是您想要根据您的数据改变“季度”?除非您精确定义您的期望(或者“季度”有多长,相信我,可能会有所不同!)这是一个算法问题,而不是 pandas 或 python 问题。
  • @vmg - 感谢您的提问。理想情况下,我想像你说的那样选择。如果有帮助,我实际上使用 df['Quarter'] = pd.PeriodIndex(df['Provision Date'], freq="Q-MAR").strftime("Q%q") 创建了一个文本变量。 (我对 dateoffset 的东西有点迷失了)

标签: python pandas datetime


【解决方案1】:

您应该首先定义您的宿舍。您可以使用 pd.period_range 正确的频率: 示例:

quarters = pd.period_range('2016Q1', '2017Q1', freq='Q-MAR')

这将为您提供一个 PeriodIndex,您可以在其中更改频率以使用 asfreq 获取所需的日期:

quarters.asfreq('D', 'E')

这将为您提供 PeriodIndex,您可以使用它来分割您的索引。

documentation 中有更多示例。

【讨论】:

  • 感谢您的帮助和指向 DateOffset 内容的指针。我已经发布了一个基于它的解决方案。
【解决方案2】:

pandas.DatetimeIndex.quarter 也可能有用。

然后您可以使用groupby 轻松聚合。

【讨论】:

    【解决方案3】:

    在 Pandas 中使用 Alex 指向 DateOffset 功能的指针,我找到了部分解决方案,以及 datetime 模块:

    import datetime
    from pandas.tseries.offsets import *
    now = datetime.datetime.now()
    start_year = (now - BQuarterEnd(n=1) - (12 * MonthBegin())).to_datetime()
    end_year = (now - BQuarterEnd(n=1) ).to_datetime()
    df[start_year.strftime("%Y-%m-%d") : end_year.strftime("%Y-%m-%d")]
    

    【讨论】:

      猜你喜欢
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2021-04-30
      • 2016-01-30
      相关资源
      最近更新 更多