我想创建一个函数,该函数将输入当前月份和当前年份,并给出带有年份的最近12个月和24个月的输出,
例如,假设函数为f,
f(4,2019) # 4 is the current month and 2019 is the current year
此函数将返回两个两个输出
first output:
[3,2,1,12,11,10,9,8,7,6,5,4] # last 12 months from current month i.e. 4
[2019,2019,2019,2018,2018,2018,2018,2018,2018,2018,2018,2018]
# the years of corresponding months
second output:
[3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4] # last 24 months
[2019,2019,2019,2018,2018,2018,2018,2018,2018,2018,2018,2018,
2018,2018,2018,2017,2017,2017,2017,2017,2017,2017,2017,2017]
# years of above months
如何在python中以最有效的方式做到这一点?
答案 0 :(得分:1)
最有效的方法是避免自己进行日期算术,并使用dateutil
为您完成日期计算。
>>> from dateutil import parser, relativedelta
>>> d = parser.parse('2019-04-01')
>>> d
datetime.datetime(2019, 4, 1, 0, 0)
>>> previous = [d - relativedelta.relativedelta(months=m) for m in range(1,13)]
>>> previous
[datetime.datetime(2019, 3, 1, 0, 0), datetime.datetime(2019, 2, 1, 0, 0),
datetime.datetime(2019, 1, 1, 0, 0), datetime.datetime(2018, 12, 1, 0, 0),
datetime.datetime(2018, 11, 1, 0, 0), datetime.datetime(2018, 10, 1, 0, 0),
datetime.datetime(2018, 9, 1, 0, 0), datetime.datetime(2018, 8, 1, 0, 0),
datetime.datetime(2018, 7, 1, 0, 0), datetime.datetime(2018, 6, 1, 0, 0),
datetime.datetime(2018, 5, 1, 0, 0), datetime.datetime(2018, 4, 1, 0, 0)]
要获得24个月而不是12个月的时间,请用列表理解中的25
代替13
。
您可能会发现,从函数中返回datetime
比整数更方便。从datetime
中提取日期和月份很容易,格式化更方便了 ,而且您可能有时还是必须将它们转换回datetime
。 / p>
答案 1 :(得分:0)
即使stackoverflow实际上不是代码编写服务...也应该这样做:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def f(month, year):
m=range(12, 0, -1)*3
y=[year]*12+[year-1]*12
return m[13-month:(13-month+12)], y[13-month:(13-month+12)]
print f(4, 2019)
输出为:
([3, 2, 1, 12, 11, 10, 9, 8, 7, 6, 5, 4], [2019, 2019, 2019, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018])
您可以自己从该版本中获得两年的版本。
答案 2 :(得分:0)
功能:
import datetime
import dateutil.relativedelta
def get_prev_month_date(year, month, period):
years, months = ([] for j in range(2))
for i in range(1, period+ 1):
date = datetime.date(year, month, 3)
months.append((date - dateutil.relativedelta.relativedelta(months=i)).month)
years.append((date - dateutil.relativedelta.relativedelta(months=i)).year)
return years, months
代码:
years_list, months_list = get_prev_month_date(2019, 4, 12)
结果:
[2019, 2019, 2019, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018]
[3, 2, 1, 12, 11, 10, 9, 8, 7, 6, 5, 4]
答案 3 :(得分:0)
您可以使用`Pandas'库设置今天的日期以及您之前的目标月份。
import pandas as pd
today = pd.to_datetime('today').strftime("%d/%m/%Y")
last = (pd.to_datetime(today) - pd.DateOffset(years=1)).strftime("%d/%m/%Y")
listofmonths = pd.date_range(start=last, end=today, freq='MS')
如果要获得24个月的服务,请将years
设置为2。