tree = IntervalTree.from_tuples(zip(df1.Start.values, df1.End.values, df1.
    drop(['Start', 'End'], axis=1).values.tolist()))
intersections = []
for row in df2.itertuples():
    i1 = Interval(row.Start, row.End)
intersections += [(list(intersect(i1, i2)) + i2.data) for i2 in tree[i1]]
data_cols = list(df1.columns)
data_cols.remove('Start')
data_cols.remove('End')
return pd.DataFrame(intersections, columns=['Start', 'End'] + data_cols)
interval_df_intersection(mydataframe2, mydataframe1)
пересечение двух столбцов кадра данных pandas