diff --git a/activitysim/core/skim_dictionary.py b/activitysim/core/skim_dictionary.py index 587eaab89e..ba23b85dce 100644 --- a/activitysim/core/skim_dictionary.py +++ b/activitysim/core/skim_dictionary.py @@ -123,8 +123,13 @@ def map(self, zone_ids): if self.offset_series is not None: assert(self.offset_int is None) assert isinstance(self.offset_series, pd.Series) - # FIXME - faster to use series.map if zone_ids is a series? - offsets = quick_loc_series(zone_ids, self.offset_series).fillna(NOT_IN_SKIM_ZONE_ID).astype(int) + + # FIXME - turns out it is faster to use series.map if zone_ids is a series + # offsets = quick_loc_series(zone_ids, self.offset_series).fillna(NOT_IN_SKIM_ZONE_ID).astype(int) + + if isinstance(zone_ids, np.ndarray): + zone_ids = pd.Series(zone_ids) + offsets = zone_ids.map(self.offset_series, na_action='ignore').fillna(NOT_IN_SKIM_ZONE_ID).astype(int) elif self.offset_int: assert (self.offset_series is None) diff --git a/activitysim/core/util.py b/activitysim/core/util.py index 0000051df7..1351023f37 100644 --- a/activitysim/core/util.py +++ b/activitysim/core/util.py @@ -243,32 +243,13 @@ def quick_loc_df(loc_list, target_df, attribute=None): ------- pandas.DataFrame or, if attribbute specified, pandas.Series """ - - left_on = "left" - - if isinstance(loc_list, pd.Int64Index): - left_df = pd.DataFrame({left_on: loc_list.values}) - elif isinstance(loc_list, pd.Series): - left_df = loc_list.to_frame(name=left_on) - elif isinstance(loc_list, np.ndarray): - left_df = pd.DataFrame({left_on: loc_list}) - else: - raise RuntimeError("quick_loc_df loc_list of unexpected type %s" % type(loc_list)) - if attribute: target_df = target_df[[attribute]] - df = pd.merge(left_df, - target_df, - left_on=left_on, - right_index=True, - how="left").set_index(left_on) + df = target_df.reindex(loc_list) df.index.name = target_df.index.name - # regression test - # assert df.equals(target_df.loc[loc_list]) - if attribute: # return series return df[attribute]