Source code for huracanpy.assess.overlap

"""Overlap function"""

from ._match import match_pair


[docs] def overlap(tracks1, tracks2, matches=None): """ Function computing the overlap between matched tracks. Parameters ---------- tracks1 (pd.Dataframe) tracks2 (pd.Dataframe) matches (pd.Dataframe): The output from match_tracks on tracks1 and tracks2. If None, match_tracks is run on tracks1 and tracks2. Returns ------- pd.Dataframe Match dataset with added deltas in days """ if type(matches) == type(None): matches = match_pair(tracks1, tracks2) c1, c2 = matches.columns[:2].str.slice(3) tracks1, tracks2 = tracks1.to_dataframe(), tracks2.to_dataframe() matches = ( matches.join( tracks1.groupby("track_id")[["time"]] .min() .rename(columns={"time": "tmin_" + c1}), on="id_" + c1, ) .join( tracks1.groupby("track_id")[["time"]] .max() .rename(columns={"time": "tmax_" + c1}), on="id_" + c1, ) .join( tracks2.groupby("track_id")[["time"]] .min() .rename(columns={"time": "tmin_" + c2}), on="id_" + c2, ) .join( tracks2.groupby("track_id")[["time"]] .max() .rename(columns={"time": "tmax_" + c2}), on="id_" + c2, ) ) matches["delta_start"] = matches["tmin_" + c2] - matches["tmin_" + c1] matches["delta_end"] = matches["tmax_" + c2] - matches["tmax_" + c1] matches["delta_end"] = ( matches.delta_end.dt.days + matches.delta_end.dt.seconds / 86400 ) matches["delta_start"] = ( matches.delta_start.dt.days + matches.delta_start.dt.seconds / 86400 ) return matches[["id_" + c1, "id_" + c2, "temp", "dist", "delta_start", "delta_end"]]