Dnaiel - 3 years ago 160
Python Question

# transform month to discrete time periods

Let us say I have a list of dates in datetime.date format. I want to transform date in months into discrete (integer) periods.

I.e.,

``````myList = [datetime.date(2015,02,08), datetime.date(2015,02,25), datetime.date(2015,05,03), datetime.date(2016,03,27)]
``````

Since the smallest year/month is 2015/02 then that month is equivalent to 0. The next month 2015/03 would be 1, etc. Until last month 2016/03 would be 13.

I'd want a function for which I give it the start date, and then it gives me the discrete month.

I.e.,

``````discretizeMo(start_date, date_of_interest)
discretizeMo('2012-02-01', '2013-01-01')
``````

would return 11, etc.

Well, since you drop the days, the usual date arithmetic is of no use here. The simplest solution would be to convert years & months to a scale:

``````def discretizeMo(d1, d2):
return (d2.year * 12 + d2.month) - (d1.year * 12 + d1.month)
``````

The result is the number of months passed since the `d1` date till the `d2` date.

That simple.

If you want to split it into smaller units of fixed length (e.g., weeks), it will be different:

``````def discretizeMo(d1, d2):
return (d2 - d1).days // 7
``````

The difference comes from the variable duration of months in days: 28-29-30-31.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download