У меня есть массив дат от 2004 до 2016 года. Я хочу найти все значения с общим месячным диапазоном на основе 3 начальных значений массива. Например, давайте, если бы у меня были даты 25/03/2004, 12/02/2005, 25/03/2006, то на основе этих значений будут выбраны февраль и март. Далее я хочу расширить этот диапазон на х число месяца. Если к одному месяцу будет выбран январь-апрель (февраль и март, выбранные месяцы, январь и апрель - расширенные месяцы) Если к 2 месяцам будет выбран De c -May. Идея состоит в том, чтобы использовать эти выбранные месяцы для удаления всех других дат, которые не находятся в этих диапазонах из массива. Обычно можно использовать что-то date + relativedelta(months = 2)
. Но в этой ситуации это нельзя использовать, так как я слежу за большим количеством лет, и единственное, что я ищу, это обычные месяцы.
Я придумал следующий код, чтобы решить его часть. Это выглядит в течение первых трех месяцев, и скажем, они февраль / мар / мар. Затем он выбирает эти даты и продлевает количество месяцев, указанных числами c операций (т. Е. 02-01 = 01, относящихся к январю. Тем не менее, вещи становятся безобразными в спешке, если рассматриваются 2 месяца (т. Е. 02 (февраль) -02 = 0, что не относится ни к какому месяцу. Есть идеи, как решить эту проблему?
def UniModGreenUp(iniMntRan = 3, extMntRan = 1, Dtarr = np.asarray(GreenUp_Dates)):
seasSt = [i.month for i in Dtarr]
UniSeasSt3 = seasSt[0:iniMntRan] #Selects the initial Values
UniSeasSt3 = list(range((np.min(UniSeasSt3)-extMntRan),(np.max(UniSeasSt3)+extMntRan))) #Extends the month range
UniSeasSt = np.where(np.isin(seasSt,UniSeasSt3)) #Selects only the specified months, return indexes
return (UniSeasSt)
#Where, iniMntRan : initial month range - looks at the first x amount of values in the array
# extMntRan : Extended Month Range - set 1 to extend by one month from either sides (if feb/Mar then Jan and Apr)
#Dtarr : Date Array - array values shown below
#out:
print(Greenup_Dates)
[Timestamp('2003-03-12 00:00:00'), Timestamp('2004-03-14 00:00:00'), Timestamp('2005-03-14 00:00:00'), Timestamp('2006-03-15 00:00:00'), Timestamp('2006-08-22 00:00:00'), Timestamp('2007-03-18 00:00:00'), Timestamp('2007-08-02 00:00:00'), Timestamp('2008-03-03 00:00:00'), Timestamp('2008-07-26 00:00:00'), Timestamp('2009-02-27 00:00:00'), Timestamp('2009-08-26 00:00:00'), Timestamp('2010-03-17 00:00:00'), Timestamp('2010-12-12 00:00:00'), Timestamp('2012-01-31 00:00:00'), Timestamp('2013-02-04 00:00:00'), Timestamp('2014-02-07 00:00:00'), Timestamp('2015-02-08 00:00:00'), Timestamp('2016-02-13 00:00:00'), Timestamp('2017-03-02 00:00:00'), Timestamp('2018-01-31 00:00:00')]