def buildings(store, households, jobs, building_sqft_per_job, settings): df = store['buildings'] if settings.get("set_nan_price_to_zero", False): for col in ["residential_price", "non_residential_price"]: df[col] = 0 if settings.get("reconcile_residential_units_and_households", False): # prevent overfull buildings (residential) df["residential_units"] = pd.concat( [df.residential_units, households.building_id.value_counts()], axis=1).max(axis=1) if settings.get("reconcile_non_residential_sqft_and_jobs", False): # prevent overfull buildings (non-residential) tmp_df = pd.concat([ df.non_residential_sqft, jobs.building_id.value_counts() * df.building_type_id.fillna(-1).map(building_sqft_per_job) ], axis=1) df["non_residential_sqft"] = tmp_df.max(axis=1).apply(np.ceil) fill_nas_cfg = settings.get("table_reprocess", None) if fill_nas_cfg is not None: fill_nas_cfg = fill_nas_cfg.get("buildings", None) if fill_nas_cfg is not None: df = utils.table_reprocess(fill_nas_cfg, df) return df
def jobs(store, settings): df = store['jobs'] if settings.get("remove_invalid_building_ids", True): # have to do it this way to prevent circular reference df.building_id.loc[~df.building_id.isin(store['buildings'].index)] = -1 fill_nas_cfg = settings.get("table_reprocess", {}).get("jobs", None) if fill_nas_cfg is not None: df = utils.table_reprocess(fill_nas_cfg, df) return df