def no_conflict_select(x_data,y_data ,x_s,x_e,y_s,y_e):
x_data["dk_value"] = 1
x_id="dk_id"
x_data[x_id]=x_data.index.values.tolist()
y_data["dk_value"] = 1
dk_data = pd.merge(x_data, y_data, on="dk_value", how="left")
xs_ys_xe = (dk_data[x_s]<= dk_data[y_s]) & (dk_data[y_s] <= dk_data[x_e])
xs_ye_xe = (dk_data[x_s]<= dk_data[y_e]) & (dk_data[y_e] <= dk_data[x_e])
ys_xs_ye = (dk_data[y_s]<= dk_data[x_s]) & (dk_data[x_s] <= dk_data[y_e])
ys_xe_ye = (dk_data[y_s]<= dk_data[x_e]) & (dk_data[x_e] <= dk_data[y_e])
conflict_list = list(set(dk_data[xs_ys_xe | xs_ye_xe | ys_xe_ye | ys_xs_ye][x_id]))
mid_df = pd.DataFrame({x_id: conflict_list, "conflict": [1] * len(conflict_list)})
out_dk = pd.merge(x_data, mid_df, on=x_id, how="left")
out_dk = out_dk[pd.isnull(out_dk["conflict"])]
return out_dk
if __name__ == '__main__':
x_data = pd.DataFrame({"x_id": ["A", "B", "C"], "x_s": [1, 3, 8], "x_e": [3, 5, 9]})
y_data = pd.DataFrame({"y_id": ["D", "E", "F", "G"], "y_s": [1, 2, 4, 6], "y_e": [2, 4, 6, 7]})
no_conflict_data=no_conflict_select(x_data,y_data,"x_s","x_e","y_s","y_e")