数据框行/列计算[单元依赖]

Posted

技术标签:

【中文标题】数据框行/列计算[单元依赖]【英文标题】:Dataframe row/column calculations [cell dependency] 【发布时间】:2021-11-05 19:00:41 【问题描述】:
Year PresentValue InterestRateChange ShortTermRates CouponRates LoanRates DeltaPrice CouponEarning LoanPayment Earnings/Loss FinalPresentValue
1991 2.000000e+10 -0.005 0.060 0.085 0.070 1.000000e+09 1.700000e+09 -875000000.0 1.825000e+09 2.182500e+10
1992 NaN -0.005 0.055 0.080 0.065 NaN NaN -812500000.0 NaN NaN
1993 NaN -0.005 0.050 0.075 0.060 NaN NaN -750000000.0 NaN NaN
1994 NaN -0.005 0.045 0.070 0.055 NaN NaN -687500000.0 NaN NaN
1995 NaN 0.020 0.040 0.065 0.050 NaN NaN -625000000.0 NaN NaN
1996 NaN 0.020 0.060 0.085 0.070 NaN NaN -875000000.0 NaN NaN

我在 pandas DataFrame 中有下表,您可能会注意到有些列由 NaN 单元格组成。这些单元格依赖于另一个单元格的输出。

例如“PresentValue”列,为了填写第二个卖出,我必须取“FinalPresentValue”列中的第一个值,在“CouponEarning”列的第二个单元格中,我必须将最近计算的第二个值乘以“PresentValue”列与“CouponRates”列中的第二个值等,等等。

如何在没有繁琐和重复编码的情况下填写表格? 我真的很感激任何关于如何解决这个问题的建议。

到目前为止,这是我的代码:

Initial_Investment = 7.5 * 10**9 # 10^9 ~ 1 Billion
Initial_Loan = 12.5 * 10**9
Initial_Portfolio_Value = 20 * 10**9 
Portfolio_Duration = 10 # Macaulay Duration 
Initial_Short_Term_Rate = 0.06
Initial_Coupon_Rate = 0.085 
Initial_Loan_Rate = 0.07

years = np.arange(1991,1997,1) # 1991-1996
interest_rate_change = np.array([-0.005, -0.005, -0.005, -0.005, 0.02, 0.02]) # 0.005 ~ 0.5%
present_value = np.array([Initial_Portfolio_Value, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN])

df = pd.DataFrame('Year':years, 'PresentValue':present_value, 'InterestRateChange':interest_rate_change)

df['ShortTermRates'] = df['InterestRateChange'].shift(1,fill_value=Initial_Short_Term_Rate).cumsum()
df['CouponRates'] = df['InterestRateChange'].shift(1,fill_value=Initial_Coupon_Rate).cumsum()
df['LoanRates'] = df['InterestRateChange'].shift(1,fill_value=Initial_Loan_Rate).cumsum()
df['DeltaPrice'] = df.InterestRateChange * df.PresentValue * -Portfolio_Duration
df['CouponEarning'] = df.CouponRates * df.PresentValue 
df['LoanPayment'] = df.LoanRates * -Initial_Loan
df['Earnings/Loss'] = df.DeltaPrice + df.CouponEarning + df.LoanPayment
df['FinalPresentValue'] = df.PresentValue + df['Earnings/Loss']
df

【问题讨论】:

【参考方案1】:

要替换 PresentValue 列中的 NaN 值,您可以取 PresentValue 的平均值并将其替换为 NaN

由于其他列值不同,计算出来的最终输出值也会不同,不会有任何问题

如果将mean替换为Nan,也会生成多样化的数据

但由于 PresentValue 是主键,它不应该包含 NaN 值(只是观察)

【讨论】:

请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。

以上是关于数据框行/列计算[单元依赖]的主要内容,如果未能解决你的问题,请参考以下文章

sql面试

Pandas 基于相互依赖的滞后值计算列

数据框行中内容的修剪/截断平均值

检查列中的值是不是存在于数据框行中的其他位置

如何重塑数据框并将重复列转换为数据框行?

从其他数据框行和列位置找到相应的值