【问题标题】:Python Date Index: finding the closest date a year ago from todayPython日期索引:查找一年前距今天最近的日期
【发布时间】:2017-12-14 22:44:58
【问题描述】:

我有一个带有日期格式索引的熊猫数据框(股票价格)。它是每天的,但仅适用于工作日。 我基本上尝试计算年初至今和一年前的一些价格表现。 为了在我的数据框中获取实际年份的第一个日期,我使用了以下方法:

today = str(datetime.date.today())
curr_year = int(today[:4])
curr_month = int(today[5:7])
first_date_year = (df[str(curr_year)].first_valid_index())

现在我尝试获取最接近一年前的日期(距 last_valid_index() 正好一年)。我可以提取月份和年份,但它不会那么精确。有什么建议吗?

谢谢

【问题讨论】:

  • “一年前”是什么意思? 52 周、365 天还是 1 年?对于舒适的日期计算,我建议使用arrow 模块,该模块提供.shift() method
  • 所以你想得到最接近一年前的工作日?当一年有假期而另一年没有假期时,你会怎么做?

标签: python pandas date datetime dataframe


【解决方案1】:

由于您没有提供任何数据,我假设您有一个日期列表(字符串类型),如下所示:

dates = ['11/01/2016', '12/01/2016', '02/01/2017', '03/01/2017']

然后您需要将其转换为日期时间格式,我建议使用 pandas:

pd_dates = pd.to_datetime(dates)

那么你必须定义今天和一年前。我建议为此使用日期时间:

today = datetime.today()
date_1yr_ago = datetime(today.year-1, today.month, today.day)

最后,将日期列表分割为大于 date_1yr_ago 值的日期,并获取该分割的第一个值:

pd_dates[pd_dates > date_1yr_ago][0]

这将返回大于 1 年前日期的第一个日期。

输出:

Timestamp('2017-02-01 00:00:00')

您可以使用以下代码将该日期时间值转换为字符串:

datetime.strftime(pd_dates[pd_dates > date_1yr_ago][0], '%Y/%m/%d')

输出:

'2017/02/01'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2016-12-16
    • 1970-01-01
    • 2012-02-08
    相关资源
    最近更新 更多