数据框行/列计算[单元依赖]
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 值(只是观察)
【讨论】:
请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。以上是关于数据框行/列计算[单元依赖]的主要内容,如果未能解决你的问题,请参考以下文章