Я хотел бы объединить два кадра данных на столбцах Id и top_depth и bottom_depth.
Я хотел бы взять каждую запись из левого df и, если доступно, назначить запись справа df, если «depth» падает между «top_depth» и «bottom_depth».Объединить два кадра данных pandas на основе диапазона глубины
Вот Exemple из dataframes:
df1 = pd.DataFrame(np.array([
['a', 27, 29, 10],
['a', 29, 30, 2.5],
['a', 30, 32.5, 56],
['a', 32.5, 36, 18],
['a', 36, 39, 5],
['b', 0, 3, 0.5],
['b', 3, 6, 1.5],
['b', 6, 9, 2.5]]),
columns=['name', 'top_depth', 'bottom_depth', 'attr1'])
df2 = pd.DataFrame(np.array([
['a', 0, 25, 'alpha'],
['a', 25, 28, 'beta'],
['a', 28, 39, 'gamma'],
['b', 0, 6, 'alpha'],
['b', 6, 9, 'beta'],
['b', 9, 18, 'phi'],
['b', 18, 25, 'teta']]),
columns=['name', 'top_depth', 'bottom_depth', 'attr2'])
Затем слить, чтобы получить это:
>>> df3
name top_depth bottom_depth attr1 attr2
0 a 0 25 NaN alpha
1 a 25 27 NaN beta
2 a 27 28 10 beta
2 a 28 29 10 gamma
3 a 29 30 2.5 gamma
4 a 30 32.5 56 gamma
5 a 32.5 36 18 gamma
6 a 36 39 5 gamma
7 b 0 3 0.5 alpha
8 b 3 6 1.5 alpha
9 b 6 9 2.5 beta
10 b 9 18 NaN phi
11 b 18 25 NaN teta
Есть простой способ сделать это в панд?
спасибо, что близко. На самом деле, я немного изменил свой первоначальный вопрос, чтобы больше отразить мою потребность. Мне нужно разбить первую строку «df1» (27 -> 28 и 28 -> 29), так как диапазон глубин «df2» не равен диапазону глубины «df1». Я думаю, что это более сложно сделать ... – lorenzo