is_liability_portfolio = 3 begin_end = (realunreal .merge(position, on="Position_ID", how="left") .merge(position[['Position_ID', 'MarketValueRC', 'AccruedIncomeRC', 'OutstandingRC', 'BookValueRC', 'BVPrice']], on="Position_ID", how="left", suffixes=("_Begin", "_End")) .merge(earned, on="Position_ID", how="left") .merge(amort_fees, on="Position_ID", how="left") .merge(divs, on="Position_ID", how="left") .assign( EarnedInterestRC = lambda df: df['EarnedInterestRC'].fillna(0), EarnedFeesRC = lambda df: df['EarnedFeesRC'].fillna(0), Dividend_Amount = lambda df: df['Dividend_Amount'].fillna(0), AmortizedFee = lambda df: df['AmortizedFee'].fillna(0), TranIncome_Amount= lambda df: df['TranIncome_Amount'].fillna(0), MarketValueRC_Begin = lambda df: df['MarketValueRC_Begin'].fillna(0), MarketValueRC_End = lambda df: df['MarketValueRC_End'].fillna(0), AccruedIncomeRC_Begin = lambda df: np.where( df["Portfolio_PortfolioType_ID"] == is_liability_portfolio, df["AccruedIncomeRC_Begin"].fillna(0) * -1, df["AccruedIncomeRC_Begin"].fillna(0) ), AccruedIncomeRC_End = lambda df: np.where( df["Portfolio_PortfolioType_ID"] == is_liability_portfolio, df["AccruedIncomeRC_End"].fillna(0) * -1, df["AccruedIncomeRC_End"].fillna(0) ), EarnedIncome = lambda df: np.where( df["Portfolio_PortfolioType_ID"] == 3, (df["EarnedInterestRC"] + df["EarnedFeesRC"]) * -1, df["EarnedInterestRC"] + df["EarnedFeesRC"] ), MarketValueAccruedIncome_Begin = lambda df: df["MarketValueRC_Begin"] + df["AccruedIncomeRC_Begin"], MarketValueAccruedIncome_End = lambda df: df["MarketValueRC_End"] + df["AccruedIncomeRC_End"], GainLoss = lambda df: df["RealGainsMVInPeriodRC"] + df["UnrealGainsMVInPeriodRC"], Interest = lambda df: df["EarnedIncome"] + df["AmortizedFee"] + df["Dividend_Amount"] + df["TranIncome_Amount"], TotalGain = lambda df: df["GainLoss"] + df["Interest"], AsOfDate = lambda df: df['StartDate'], # TODO: delete the asofdate because we will only rely on start and enddate DateRecordCreated = pd.Timestamp.now() ) )