Source code for featuretools.primitives.standard.transform.nth_week_of_month

import numpy as np
import pandas as pd
from woodwork.column_schema import ColumnSchema
from woodwork.logical_types import Datetime, Double

from featuretools.primitives.base import TransformPrimitive


[docs]class NthWeekOfMonth(TransformPrimitive): """Determines the nth week of the month from a given date. Description: Converts a datetime to an float representing the week of the month in which the date falls. The first day of the month starts week 1, and the week number is incremented each Sunday. Examples: >>> from datetime import datetime >>> nth_week_of_month = NthWeekOfMonth() >>> times = [datetime(2019, 3, 1), ... datetime(2019, 3, 3), ... datetime(2019, 3, 31), ... datetime(2019, 3, 30)] >>> nth_week_of_month(times).tolist() [1.0, 2.0, 6.0, 5.0] """ name = "nth_week_of_month" input_types = [ColumnSchema(logical_type=Datetime)] return_type = ColumnSchema(logical_type=Double, semantic_tags={"numeric"}) def get_function(self): def nth_week_of_month(x): df = pd.DataFrame({"date": x}) df["first_day"] = df.date - pd.to_timedelta(df["date"].dt.day - 1, unit="d") df["dom"] = df.date.dt.day df["first_day_weekday"] = df.first_day.dt.weekday df["adjusted_dom"] = df.dom + df.first_day_weekday + 1 df.loc[df["first_day_weekday"].astype(float) == 6.0, "adjusted_dom"] = df[ "dom" ] df["week_of_month"] = np.ceil(df.adjusted_dom / 7.0) return df.week_of_month.values return nth_week_of_month