<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def diff_boolean(self, df, column_name=None, uuid=None, duration=True, min_event_filter='3 hours'):
 """ takes the dataframe of missing values, and returns a dataframe that indicates the length of each event where data was continuously missing Parameters df : pd.DataFrame() Dataframe to check for missing data (must be in boolean format where 1 indicates missing data. column_name : str the original column name produced by MDAL Query uuid : str the uuid associated with the meter, if known duration : bool If True, the duration will be displayed in the results. If false the column will be dropped. min_event_filter : str Filters out the events that are less than the given time period Returns ------- pd.DataFrame() dataframe with the start time of the event (as the index), end time of the event (first time when data is reported) """


        if uuid == None:
            uuid = 'End'

        data_gaps = df[(df.diff() == 1) | (df.diff() == -1)].dropna()
        data_gaps["duration"] = abs(data_gaps.index.to_series().diff(periods=-1))

        data_gaps[uuid] = data_gaps.index + (data_gaps["duration"])

        data_gaps = data_gaps[data_gaps["duration"] > pd.Timedelta(min_event_filter)]
        data_gaps = data_gaps[data_gaps[column_name] == 1]
        data_gaps.pop(column_name)
        if not duration:
            data_gaps.pop('duration')
        data_gaps.index = data_gaps.index.strftime(date_format="%Y-%m-%d %H:%M:%S")
        data_gaps[uuid] = data_gaps[uuid].dt.strftime(date_format="%Y-%m-%d %H:%M:%S")

        return data_gaps