Source code for policy_modules.min_wage

#!/usr/bin/env python
from utility_modules.get_parameters import get_params
from utility_modules.get_parameters import get_parse_params
from src.HieuTable import Hieu as Hieu
import numpy as np
import pandas as pd
import pdb


[docs]class MinWage(): def __init__(self, policy_dict, min_year, base_year): self.state_min_wages = get_params(policy_dict['regional_minwage_17reg']) self.parameters = get_parse_params(policy_dict['minwage_parameters']) self.inflators = get_params(policy_dict['inflators']) #self.system_params= get_parse_params(policy_dict['fid'], policy_dict['system']) if min_year not in self.state_min_wages.year.tolist(): raise AssertionError else: self.base_min_wage = self.state_min_wages[self.state_min_wages.year == base_year] self.base_min_wage = self.base_min_wage.sort_values(['minwage_region', 'firm_size_cat'])
[docs] def set_year(self, year): if year not in self.state_min_wages.year.tolist(): raise AssertionError elif year > max(self.state_min_wages.year): max_year = max(self.state_min_wages.year) inflate = self.inflators.cpiu**(year - max_year) self.curr_min_wage = self.state_min_wages[self.state_min_wages.year == max_year].copy() self.curr_min_wage.year = year self.curr_min_wage[['minwage']] *= inflate else: self.curr_min_wage = self.state_min_wages[self.state_min_wages.year == year].copy()
[docs] def min_wage(self, Worker, Family,Hieu): self.curr_min_wage = self.curr_min_wage.sort_values(['minwage_region', 'firm_size_cat']) temp_worker = Worker[['person_id','hourly_wage','wages', 'minwage_region', 'firm_size', 'family_id']] temp_min_wage = pd.merge(self.curr_min_wage, self.base_min_wage, on = ['minwage_region', 'firm_size_cat', 'firmsize']) temp_min_wage['change'] = (temp_min_wage.minwage_x - temp_min_wage.minwage_y) / temp_min_wage.minwage_y region_limits = temp_min_wage[temp_min_wage.firm_size_cat == 1][['minwage_region', 'firmsize']] region_limits.columns = [['minwage_region', 'firmsize_limit']] #pdb.set_trace() temp_worker = pd.merge(temp_worker, region_limits, on = 'minwage_region', how = 'left') temp_worker['firm_size_cat'] = (temp_worker.firm_size >= temp_worker.firmsize_limit).astype('int') temp_worker = pd.merge(temp_worker,temp_min_wage[['firm_size_cat', 'change', 'minwage_x', 'minwage_region']], on = ['firm_size_cat', 'minwage_region'], how = 'left') loc_0 = np.where(temp_worker.hourly_wage <= temp_worker.minwage_x)[0] loc_1 = np.where((temp_worker.hourly_wage > temp_worker.minwage_x) & (temp_worker.hourly_wage <= self.parameters.ripple_effect_1st_thresh * temp_worker.minwage_x))[0] loc_2 = np.where((temp_worker.hourly_wage > self.parameters.ripple_effect_1st_thresh * temp_worker.minwage_x) & (temp_worker.hourly_wage <= self.parameters.ripple_effect_2nd_thresh * temp_worker.minwage_x))[0] loc_3 = np.where(temp_worker.hourly_wage > self.parameters.ripple_effect_2nd_thresh * temp_worker.minwage_x)[0] min_wage_inf_mtx = np.zeros([temp_worker.shape[0], 4]) min_wage_inf_mtx[loc_0, 0] = 1 + (temp_worker.change[loc_0] * self.parameters.elasticity_up_to_min_wage) min_wage_inf_mtx[loc_1, 0] = 1 + (temp_worker.change[loc_1] * self.parameters.elasticity_up_to_1st_thresh) min_wage_inf_mtx[loc_2, 0] = 1 + (temp_worker.change[loc_2] * self.parameters.elasticity_up_to_2nd_thresh) min_wage_inf_mtx[loc_3, 0] = 1 min_wage_inf = np.matrix(min_wage_inf_mtx.sum(axis = 1)).T for col in ['hourly_wage', 'wages']: Worker[col] = np.multiply(Worker[col].values, min_wage_inf.T).T # updating Worker Table directly Worker['minimum_hourly_wage']=temp_worker.minwage_x Worker['minimum_wage']=Worker.wages * Worker.minimum_hourly_wage.divide(Worker.hourly_wage) #Recording the Minimum Wage for each individual temp_worker['delta_wage'] = Worker.wages - temp_worker.wages hieu_df = Hieu.get_hieu_table() hieu_df=pd.merge(hieu_df,temp_worker[['delta_wage', 'person_id']],on='person_id',how='left') hieu_df['ind_income']=hieu_df['ind_income']+hieu_df['delta_wage'].fillna(0) hieu_df.drop('delta_wage',inplace=True,axis=1) Hieu.set_hieu_table(hieu_df) delta_wage = pd.merge(Family[['family_id']], temp_worker[['delta_wage', 'family_id']], on = 'family_id', how = 'left') delta_wage = delta_wage.groupby('family_id').sum() delta_wage = delta_wage.reset_index() delta_wage = pd.merge(Family[['family_id']], delta_wage, on = 'family_id', how = 'left') delta_wage['delta_wage'] = delta_wage['delta_wage'].fillna(0) Family['fam_income'] = Family['fam_income'] + delta_wage.delta_wage # updating Family table directly return (Worker, Family,Hieu)
[docs] def minwage_threshold(self, Worker): """ hard-coded firm size """ min_wage = Worker[['minwage_region']] min_wage['firm_size_cat'] = (Worker['firm_size'] >= 25)*1 min_wage = min_wage.merge(self.curr_min_wage, on=['minwage_region', 'firm_size_cat'], how='left') Worker['threshold'] = 52 * Worker['hrs_week'] * min_wage['minwage'] return(Worker)