def METHOD_NAME(
    controls_catches: pd.DataFrame,
    segments: pd.DataFrame,
) -> pd.DataFrame:
    controls_catches = controls_catches.where(controls_catches.notnull(), None)
    controls_segments = (
        attribute_segments_to_catches(
            controls_catches,
            segments[["segment", "segment_name", "fao_area", "gear", "species"]],
        )[["id", "segment", "segment_name"]]
        .drop_duplicates()
        .rename(columns={"segment_name": "segmentName"})
    )
    controls_segments["segment"] = df_to_dict_series(
        controls_segments[["segment", "segmentName"]]
    )
    controls_segments = (
        controls_segments.groupby("id")[["segment", "segmentName"]]
        .agg(list)
        .reset_index()
        .rename(columns={"segment": "segments"})[["id", "segments"]]
    )
    controls_without_segment = pd.DataFrame(
        {"id": sorted(set(controls_catches.id) - set(controls_segments.id))}
    )
    controls_without_segment["segments"] = [list()] * len(controls_without_segment)
    controls_segments = pd.concat([controls_segments, controls_without_segment])
    controls_segments = controls_segments.reset_index(drop=True)
    return controls_segments