我想在列Id和top_depth和bottom_depth上合并两个数据帧。
我想从左边的df取得每条记录,如果可用的话,如果'深度'落在'top_depth'和'bottom_depth'之间,则从右边的df分配一条记录。根据深度范围合并两个熊猫数据帧
这里是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
有没有一种简单的方法做,在熊猫吗?
非常感谢。其实,我稍微修改了我原来的问题,以反映更多的需求。由于'df2'的深度范围不等于'df1'的深度范围,所以我必须分割'df1'的第一行(27→28和28→29)。我认为这样做比较棘手... – lorenzo