def do_left_join_python(a, b, av, bv): indexer, mask = lib.ordered_left_join_int64(a, b) n, ak = av.shape _, bk = bv.shape result_width = ak + bk result = np.empty((result_width, n), dtype=np.float64) result[:ak] = av.T bchunk = result[ak:] _take_multi(bv.T, indexer, bchunk) np.putmask(bchunk, np.tile(mask, bk), np.nan) return result
def do_left_join_multi_v2(a, b, av, bv): indexer, mask = lib.ordered_left_join_int64(a, b) bv_taken = bv.take(indexer, axis=0) np.putmask(bv_taken, mask.repeat(bv.shape[1]), np.nan) return np.concatenate((av, bv_taken), axis=1)