re_qtr_samp = WS_resample(seq_DT, re_qtr, fill_cols=fill_cols) co_qtr_samp = WS_resample(seq_DT, co_qtr, fill_cols=fill_cols) oi_qtr_samp = WS_resample(seq_DT, oi_qtr, fill_cols=fill_cols) cm_qtr_samp = align_subtract(re_qtr_samp, co_qtr_samp) ol_qtr_samp = align_div(cm_qtr_samp, oi_qtr_samp) DF_ol_qtr = DF_ol_qtr.append(ol_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_ol_tot = substitute_Value(DF_ol_yr, DF_ol_qtr) #*------------ firstCheck_duplicates(DF_ol_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_ol_tot = add_mapped_tick(DF_ol_tot, trim_codeMap)[cols] DF_ol_tot['StyleName'] = 'OpLev' #*------------ secondCheck_columns(DF_ol_tot) #*------------ DF = DF_ol_tot
# Quarter fill_cols = ['FiscalPrd', 'FiscalPrd2', 'CalPrdEndDate', 'Value_', 'FILLyr'] gi_qtr_samp = WS_resample(seq_DT, gi_qtr, fill_cols=fill_cols) aa_qtr_samp = WS_resample(seq_DT, aa_qtr, fill_cols=fill_cols) gpoa_qtr_samp = align_div(gi_qtr_samp, aa_qtr_samp) gpoa_qtr_samp['Value_'] = gpoa_qtr_samp['Value_'] * 100 DF_gpoa_qtr = DF_gpoa_qtr.append(gpoa_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_gpoa_tot = substitute_Value(DF_gpoa_yr, DF_gpoa_qtr) #*------------ firstCheck_duplicates(DF_gpoa_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = ['BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref'] DF_gpoa_tot = add_mapped_tick(DF_gpoa_tot, trim_codeMap)[cols] DF_gpoa_tot['StyleName'] = 'GPOA' #*------------ secondCheck_columns(DF_gpoa_tot) #*------------ DF = DF_gpoa_tot # Save! save_batch(bkfil, DF, mapping, fileName)
DF_raw_samp = reduce(my_merge, [DF_raw0, DF_raw1, DF_raw2]) DF_IBES_ROE = DF_IBES_ROE.append(DF_raw_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_IBES_ROE.sort_values(['RGN_TP_CD', 'Code', 'BASE_DT'], inplace=True) DF_IBES_ROE.reset_index(drop=True, inplace=True) DF_IBES_ROE = chg_to_type(DF_IBES_ROE, chg_col=['BASE_DT', 'Code', 'RGN_TP_CD'], type_=str) #*------------ firstCheck_duplicates(DF_IBES_ROE, add_cols=['RGN_TP_CD']) #*------------ DF_IBES_ROE = add_mapped_tick(DF_IBES_ROE, trim_codeMap, on=['Code', 'RGN_TP_CD']) cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'RGN_TP_CD', 'FY0', 'Px0', 'ActValue0', 'FY1', 'Median1', 'FY2', 'Median2', 'FY3', 'Median3', 'ROE_fy0', 'ROE_fy1', 'ROE_fy2' ] DF_IBES_ROE = DF_IBES_ROE[cols] # CREATE Expected2YR ROE AVERAGE------- A0 = DF_IBES_ROE.loc[DF_IBES_ROE['ROE_fy0'].notnull(), ['BASE_DT', 'TMSRS_CD', 'Code', 'RGN_TP_CD', 'ROE_fy0']]
# <<< Trim Date >>> (ebitda2p_yr_samp, ebitda2p_qtr_samp) = (trimDateSeq(seq_DT, DF) for DF in [ebitda2p_yr_samp, ebitda2p_qtr_samp]) DF_ebitda2p_qtr = DF_ebitda2p_qtr.append(ebitda2p_qtr_samp, sort=False) DF_ebitda2p_yr = DF_ebitda2p_yr.append(ebitda2p_yr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_ebitda2p_tot = substitute_Value(DF_ebitda2p_yr, DF_ebitda2p_qtr, val_col='zValue_') #*------------ firstCheck_duplicates(DF_ebitda2p_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_ebitda2p_tot = add_mapped_tick(DF_ebitda2p_tot, trim_codeMap)[cols] DF_ebitda2p_tot['StyleName'] = '5YRel_EBITDA2P' #*------------ secondCheck_columns(DF_ebitda2p_tot) #*------------ DF = DF_ebitda2p_tot
ro_qtr_samp = simple_mult(oi_qtr_samp, tax_qtr_samp).rename(columns={'FiscalPrd_0': 'FiscalPrd'}) ic_qtr_samp = simple_subtract(aa_qtr_samp, c_qtr_samp).rename(columns={'FiscalPrd_0': 'FiscalPrd'}) ic_qtr_samp = ic_qtr_samp[ic_qtr_samp['Value_'] > 0] roic_qtr_samp = align_div(ro_qtr_samp, ic_qtr_samp) roic_qtr_samp['Value_'] = roic_qtr_samp['Value_'] * 100 DF_roic_qtr = DF_roic_qtr.append(roic_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_roic_tot = substitute_Value(DF_roic_yr, DF_roic_qtr) #*------------ firstCheck_duplicates(DF_roic_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = ['BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref'] DF_roic_tot = add_mapped_tick(DF_roic_tot, trim_codeMap)[cols] DF_roic_tot['StyleName'] = 'ROIC' #*------------ secondCheck_columns(DF_roic_tot) #*------------ DF = DF_roic_tot # Save! save_batch(bkfil, DF, mapping, fileName)
cf_qtr_samp = WS_resample(seq_DT, cf_qtr, fill_cols=fill_cols) dv_qtr_samp = WS_resample(seq_DT, dv_qtr, fill_cols=fill_cols) cx_qtr_samp = WS_resample(seq_DT, cx_qtr, fill_cols=fill_cols) cols = ['BASE_DT', 'Code', 'FiscalPrd', 'Value_'] cc_qtr_samp = align_add(cf_qtr_samp, dv_qtr_samp) cacqr_qtr_samp = align_div(cc_qtr_samp[cols], cx_qtr_samp) DF_CAcqR_qtr = DF_CAcqR_qtr.append(cacqr_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_CAcqR_tot = substitute_Value(DF_CAcqR_yr, DF_CAcqR_qtr) #*------------ firstCheck_duplicates(DF_CAcqR_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_CAcqR_tot = add_mapped_tick(DF_CAcqR_tot, trim_codeMap)[cols] DF_CAcqR_tot['StyleName'] = 'CAcqR' #*------------ secondCheck_columns(DF_CAcqR_tot) #*------------ DF = DF_CAcqR_tot
DF_nm_qtr_chg = DF_nm_qtr_chg.append(nm_qtr_chg_samp, sort=False) DF_opm_qtr_chg = DF_opm_qtr_chg.append(opm_qtr_chg_samp, sort=False) DF_ebitdam_qtr_chg = DF_ebitdam_qtr_chg.append(ebitdam_qtr_chg_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_nm_tot = substitute_Value(DF_nm_yr, DF_nm_qtr) DF_opm_tot = substitute_Value(DF_opm_yr, DF_opm_qtr) DF_ebitdam_tot = substitute_Value(DF_ebitdam_yr, DF_ebitdam_qtr) DF_nm_chg_tot = substitute_Value(DF_nm_yr_chg, DF_nm_qtr_chg) DF_opm_chg_tot = substitute_Value(DF_opm_yr_chg, DF_opm_qtr_chg) DF_ebitdam_chg_tot = substitute_Value(DF_ebitdam_yr_chg, DF_ebitdam_qtr_chg) #*------------ firstCheck_duplicates(DF_nm_tot, DF_opm_tot, DF_ebitdam_tot, DF_nm_chg_tot, DF_opm_chg_tot, DF_ebitdam_chg_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_nm_tot = add_mapped_tick(DF_nm_tot, trim_codeMap)[cols] DF_opm_tot = add_mapped_tick(DF_opm_tot, trim_codeMap)[cols] DF_ebitdam_tot = add_mapped_tick(DF_ebitdam_tot, trim_codeMap)[cols] DF_nm_chg_tot = add_mapped_tick(DF_nm_chg_tot, trim_codeMap)[cols] DF_opm_chg_tot = add_mapped_tick(DF_opm_chg_tot, trim_codeMap)[cols] DF_ebitdam_chg_tot = add_mapped_tick(DF_ebitdam_chg_tot, trim_codeMap)[cols]
fcf_qtr_samp = align_subtract(cf_qtr_samp, cx_qtr_samp) ic_qtr_samp = align_add(db_qtr_samp, eq_qtr_samp, mi_qtr_samp) fcfroic_qtr_samp = align_div(fcf_qtr_samp, ic_qtr_samp) cfroic_qtr_samp = align_div(cf_qtr_samp, ic_qtr_samp) DF_fcfroic_qtr = DF_fcfroic_qtr.append(fcfroic_qtr_samp, sort=False) DF_cfroic_qtr = DF_cfroic_qtr.append(cfroic_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_cfroic_tot = substitute_Value(DF_cfroic_yr, DF_cfroic_qtr) DF_fcfroic_tot = substitute_Value(DF_fcfroic_yr, DF_fcfroic_qtr) #*------------ firstCheck_duplicates(DF_cfroic_tot, DF_fcfroic_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_cfroic_tot = add_mapped_tick(DF_cfroic_tot, trim_codeMap)[cols] DF_fcfroic_tot = add_mapped_tick(DF_fcfroic_tot, trim_codeMap)[cols] DF_cfroic_tot['StyleName'] = 'CFROIC' DF_fcfroic_tot['StyleName'] = 'FCFROIC' #*------------ secondCheck_columns(DF_cfroic_tot, DF_fcfroic_tot) #*------------
bkfil=bkfil) # <<< Trim Date >>> (cfo2p_yr_samp, cfo2p_qtr_samp) = (trimDateSeq(seq_DT, DF) for DF in [cfo2p_yr_samp, cfo2p_qtr_samp]) DF_cfo2p_qtr = DF_cfo2p_qtr.append(cfo2p_qtr_samp, sort=False) DF_cfo2p_yr = DF_cfo2p_yr.append(cfo2p_yr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_cfo2p_tot = substitute_Value(DF_cfo2p_yr, DF_cfo2p_qtr, val_col='zValue_') #*------------ firstCheck_duplicates(DF_cfo2p_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_cfo2p_tot = add_mapped_tick(DF_cfo2p_tot, trim_codeMap)[cols] DF_cfo2p_tot['StyleName'] = '5YRel_CFO2P' #*------------ secondCheck_columns(DF_cfo2p_tot) #*------------ DF = DF_cfo2p_tot
pfcf_DF = pfcf_DF[['BASE_DT', 'Code', 'freq', 'Value_']] pfcf_DF['Item'], pfcf_DF['Name'] = np.nan, 'PFCF_curr' pfcf_DF = pfcf_DF[(~pfcf_DF['Value_'].isin([np.Inf, -np.Inf])) & pfcf_DF['Value_'].notnull()] TMP = reduce(lambda x, y: pd.DataFrame.append(x, y, sort=True), [pe_DF, pb_DF, dy_DF, pc_DF, roe_DF, payout_DF, mktcap_DF]) TMP['freq'] = 'curr' DF_Value = reduce(lambda x, y: pd.DataFrame.append(x, y, sort=True), [DF_Value, TMP, ps_DF, pfcf_DF]) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) #*------------ firstCheck_duplicates(DF_Value, add_cols=['Name']) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = ['BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq', 'Name'] DF_Value = DF_Value.groupby('Name').apply( lambda x: add_mapped_tick(x, trim_codeMap)) DF_Value.index = DF_Value.index.droplevel(level=1) DF_Value.reset_index(drop=True, inplace=True) DF_Value = DF_Value[cols] DF_Value.rename(columns={'Name': 'StyleName'}, inplace=True) DF_Value['ref'] = None #*------------ secondCheck_columns(DF_Value)
DF_Momentum = DF_Momentum[cols].copy() # check1 DF_Momentum.loc[DF_Momentum.duplicated( subset=['BASE_DT', 'TMSRS_CD', 'StyleName']), ['BASE_DT', 'TMSRS_CD', 'StyleName']] DF_Momentum.drop_duplicates(subset=['BASE_DT', 'TMSRS_CD', 'StyleName'], keep='first', inplace=True) # check2 - Should be Empty DF_Momentum.loc[DF_Momentum.duplicated( subset=['BASE_DT', 'TMSRS_CD', 'StyleName']), ['BASE_DT', 'TMSRS_CD', 'StyleName']] #*------------ firstCheck_duplicates(DF_Momentum, add_cols=['TMSRS_CD', 'StyleName']) #*------------ #*------------ secondCheck_columns(DF_Momentum) #*------------ DF = DF_Momentum # Save! save_batch(bkfil, DF, mapping, fileName) from batch_utils.fill_monitor import print_fillReport out = print_fillReport(bkfil, freq, DF)
] d_qtr_samp = WS_resample(seq_DT, d_qtr, fill_cols=fill_cols) e_qtr_samp = WS_resample(seq_DT, e_qtr, fill_cols=fill_cols) cols = ['BASE_DT', 'Code', 'FiscalPrd', 'Value_'] de_qtr_samp = align_div(d_qtr_samp, e_qtr_samp) de_qtr_samp = de_qtr_samp[de_qtr_samp['Value_'] >= 0] DF_de_qtr = DF_de_qtr.append(de_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_de_tot = substitute_Value(DF_de_yr, DF_de_qtr) #*------------ firstCheck_duplicates(DF_de_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_de_tot = add_mapped_tick(DF_de_tot, trim_codeMap)[cols] DF_de_tot['StyleName'] = 'LTDtE' #*------------ secondCheck_columns(DF_de_tot) #*------------ DF = DF_de_tot
DF_NIGr_qtr = DF_NIGr_qtr.append(NIgr_qtr_samp, sort=False) DF_DtE_qtr = DF_DtE_qtr.append(DtE_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_ROE_tot = substitute_Value(DF_ROE_yr, DF_ROE_qtr) DF_ROA_tot = substitute_Value(DF_ROA_yr, DF_ROA_qtr) DF_OPM_tot = substitute_Value(DF_OPM_yr, DF_OPM_qtr) DF_NM_tot = substitute_Value(DF_NM_yr, DF_NM_qtr) DF_GPM_tot = substitute_Value(DF_GPM_yr, DF_GPM_qtr) DF_RevGr_tot = substitute_Value(DF_RevGr_yr, DF_RevGr_qtr) DF_NIGr_tot = substitute_Value(DF_NIGr_yr, DF_NIGr_qtr) DF_DtE_tot = substitute_Value(DF_DtE_yr, DF_DtE_qtr) #*------------ firstCheck_duplicates(DF_ROE_tot, DF_ROA_tot, DF_OPM_tot, DF_NM_tot, DF_GPM_tot, DF_RevGr_tot, DF_NIGr_tot, DF_DtE_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_ROE_tot = add_mapped_tick(DF_ROE_tot, trim_codeMap)[cols] DF_ROA_tot = add_mapped_tick(DF_ROA_tot, trim_codeMap)[cols] DF_OPM_tot = add_mapped_tick(DF_OPM_tot, trim_codeMap)[cols] DF_NM_tot = add_mapped_tick(DF_NM_tot, trim_codeMap)[cols] DF_GPM_tot = add_mapped_tick(DF_GPM_tot, trim_codeMap)[cols] DF_RevGr_tot = add_mapped_tick(DF_RevGr_tot, trim_codeMap)[cols] DF_NIGr_tot = add_mapped_tick(DF_NIGr_tot, trim_codeMap)[cols]
DF_.dropna(subset=['Code'], inplace=True) DF_['BASE_DT'] = DF_['BASE_DT'].dt.strftime('%Y%m%d') # last update typically has same-day expire_DT (need to divide) lst_DF = DF_[DF_['BASE_DT'] == seq_DT.max()].copy() bef_DF = DF_[DF_['BASE_DT'] != seq_DT.max()].copy() bef_DF = bef_DF.query('BASE_DT <= expire_DT') DF_trim = DF_trim.append(bef_DF, sort=False).append(lst_DF, sort=False) DF_ARM = DF_ARM.append(DF_trim) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) #*------------ firstCheck_duplicates(DF_ARM) #*------------ cols = ['TMSRS_CD', 'Code', 'RGN_TP_CD', 'PermRegion', 'startDT', 'endDT'] DF_ARM = add_mapped_tick(DF_ARM, trim_codeMap[cols].copy(), on=['Code', 'PermRegion']) cols = ['BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'PermRegion'] DF_ARM = DF_ARM.loc[DF_ARM['Value_'].notnull(), cols].rename( columns={'PermRegion': 'RGN_TP_CD'}) DF_ARM['StyleName'], DF_ARM['freq'] = 'ARM_starmine', 'D' #*------------ secondCheck_columns(DF_ARM) #*------------ DF_EQ = pd.DataFrame() # <<NA>>
cols = ['BASE_DT', 'Code', 'FiscalPrd', 'Value_'] _acc_qtr_samp = align_subtract(cf_qtr_samp, ni_qtr_samp) accruals_qtr_samp = align_div(_acc_qtr_samp[cols], aa_qtr_samp) accrualsS_qtr_samp = align_div(_acc_qtr_samp[cols], rev_qtr_samp) DF_accruals_qtr = DF_accruals_qtr.append(accruals_qtr_samp, sort=False) DF_accrualsS_qtr = DF_accrualsS_qtr.append(accrualsS_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_accruals_tot = substitute_Value(DF_accruals_yr, DF_accruals_qtr) DF_accrualsS_tot = substitute_Value(DF_accrualsS_yr, DF_accrualsS_qtr) #*------------ firstCheck_duplicates(DF_accruals_tot, DF_accrualsS_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_accruals_tot = add_mapped_tick(DF_accruals_tot, trim_codeMap)[cols] DF_accrualsS_tot = add_mapped_tick(DF_accrualsS_tot, trim_codeMap)[cols] DF_accruals_tot['StyleName'] = 'Accruals' DF_accrualsS_tot['StyleName'] = 'Accruals.S' #*------------ secondCheck_columns(DF_accruals_tot, DF_accrualsS_tot)
evebitda_qtr_samp = align_div(ev_qtr_samp, eba_qtr_samp) cfoev_qtr_samp = align_div(cf_qtr_samp, ev_qtr_samp) fcfev_qtr_samp = align_div(fcf_qtr_samp, ev_qtr_samp) DF_evebitda_qtr = DF_evebitda_qtr.append(evebitda_qtr_samp, sort=False) DF_cfoev_qtr = DF_cfoev_qtr.append(cfoev_qtr_samp, sort=False) DF_fcfev_qtr = DF_fcfev_qtr.append(fcfev_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_evebitda_tot = substitute_Value(DF_evebitda_yr, DF_evebitda_qtr) DF_cfoev_tot = substitute_Value(DF_cfoev_yr, DF_cfoev_qtr) DF_fcfev_tot = substitute_Value(DF_fcfev_yr, DF_fcfev_qtr) #*------------ firstCheck_duplicates(DF_evebitda_tot, DF_cfoev_tot, DF_fcfev_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_evebitda_tot = add_mapped_tick(DF_evebitda_tot, trim_codeMap)[cols] DF_cfoev_tot = add_mapped_tick(DF_cfoev_tot, trim_codeMap)[cols] DF_fcfev_tot = add_mapped_tick(DF_fcfev_tot, trim_codeMap)[cols] DF_evebitda_tot['StyleName'] = 'EV2EBITDA' DF_cfoev_tot['StyleName'] = 'CFO2EV' DF_fcfev_tot['StyleName'] = 'FCF2EV' #*------------
# SGP = SustG / PE_f12m A = DF_PEf12m[['BASE_DT', 'TMSRS_CD', 'Code', 'RGN_TP_CD', 'Value_']].rename(columns={'Value_': 'PE_f12m'}) B = DF_SustG_tot[['BASE_DT', 'TMSRS_CD', 'Value_']].rename(columns={'Value_': 'SustG'}) DF_SGP_tot = pd.merge(A, B, on=['BASE_DT', 'TMSRS_CD']) DF_SGP_tot['Value_'] = DF_SGP_tot['SustG'] / DF_SGP_tot['PE_f12m'] DF_SGP_tot['freq'], DF_SGP_tot['StyleName'] = 'M', 'SGP_f2yr' # Append All Factors #*------------ firstCheck_duplicates(DF_PEf12m, DF_DYf12m, DF_EPS_fwd, DF_ROE_fwd, DF_EGP_tot, DF_SGP_tot, add_cols=['RGN_TP_CD']) #*------------ cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'RGN_TP_CD', 'Value_', 'freq', 'StyleName' ] #*------------ secondCheck_columns(DF_PEf12m[cols], DF_DYf12m[cols], DF_EPS_fwd[cols], DF_ROE_fwd[cols], DF_EGP_tot[cols], DF_SGP_tot[cols]) #*------------ DF_GARP = reduce(lambda x, y: pd.DataFrame.append(x, y, sort=False), [ DF_PEf12m[cols], DF_DYf12m[cols], DF_EPS_fwd[cols], DF_ROE_fwd[cols], DF_EGP_tot[cols], DF_SGP_tot[cols] ])
] ac_qtr_samp = WS_resample(seq_DT, ac_qtr, fill_cols=fill_cols) rev_qtr_samp = WS_resample(seq_DT, rev_qtr, fill_cols=fill_cols) cols = ['BASE_DT', 'Code', 'FiscalPrd', 'Value_'] ardays_qtr_samp = align_div(ac_qtr_samp, rev_qtr_samp) ardays_qtr_samp['Value_'] = -1 * ardays_qtr_samp['Value_'] * 365 DF_ardays_qtr = DF_ardays_qtr.append(ardays_qtr_samp, sort=False) batch_monitor_msg(i, tot_n, st_time) batch_finish_msg(tot_n, st_time) DF_ardays_tot = substitute_Value(DF_ardays_yr, DF_ardays_qtr) #*------------ firstCheck_duplicates(DF_ardays_tot) #*------------ # Map Code -> TMSRS_CD # Should customize columns by needed ones. # MUST HAVE 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_', 'RGN_TP_CD', 'freq' cols = [ 'BASE_DT', 'TMSRS_CD', 'Code', 'Value_yr', 'Value_qtr', 'Value_', 'RGN_TP_CD', 'freq', 'ref' ] DF_ardays_tot = add_mapped_tick(DF_ardays_tot, trim_codeMap)[cols] DF_ardays_tot['StyleName'] = 'ARDays' #*------------ secondCheck_columns(DF_ardays_tot) #*------------ DF = DF_ardays_tot