Let's start by creating the dataframe, df:
import pandas as pd
lst = [[1,[0,5],[5,12],[14,20]],
[2,[5,30],[5,30],[5,35]],
[3,[30,40],[45,55],[1,20]]]
df = pd.DataFrame(lst, columns =['Object', 'Sensor1Time', 'Sensor2Time', 'Sensor3Time'])
print(df)

Next, we define a function called overlap, which calculates the overlap between two given lists:
def overlap (list1,list2):
if min([list1[1], list2[1]]) >= max([list1[0], list2[0]]):
result = [min([list1[0], list2[0]]), max([list1[1], list2[1]])]
else:
result = list1 ,list2
return result
let's call this function of two lists to see how it works:
overlap([0, 4],[2, 8])

In general, two intervals are overlapping if:
min([upperBoundOfA, upperBoundOfB]) >= max([lowerBoundOfA, lowerBoundOfB])
If this is the case, the union of those intervals is:
(min([lowerBoundOfA, lowerBoundOfB]), max([upperBoundOfA, upperBoundOfB])
taken from here Python - Removing overlapping lists
Now let's call another function, overlap_results, to combine the results of 3 lists overlaps:
def overlap_results (row):
results = []
one_two_overlap = overlap(row[0],row[1])
if type(one_two_overlap[0]) == int:
results = overlap(one_two_overlap,row[2])
else:
for lst in one_two_overlap:
result = overlap(lst,row[2])
for res in result:
if res not in results: #to avoid duplicate lists
results.append(res)
return results
and finally applying this function on every row of the dataframe, df, and creating a new column with the results:
df['SensorTimeFinal'] = df[['Sensor1Time','Sensor2Time','Sensor3Time']].apply(overlap_results, axis=1)
df
