Python 数据帧平衡未更新
我有以下代码:Python 数据帧平衡未更新,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下代码: import pandas as pd df = pd.DataFrame() df["Dates"] = DatesforAccrual df["No of Days"] = NoofDaysinAccrual df["AccrualCoupon"] = AccruedCoupon df.loc[0, 'AccrualYield'] = 0 df.loc[0, "Balance"] = 500
import pandas as pd
df = pd.DataFrame()
df["Dates"] = DatesforAccrual
df["No of Days"] = NoofDaysinAccrual
df["AccrualCoupon"] = AccruedCoupon
df.loc[0, 'AccrualYield'] = 0
df.loc[0, "Balance"] = 500
for i in range(1, len(df)):
df.loc[i, 'AccrualYield'] = df.loc[i-1,'Balance']*df.loc[i+0,'No of Days']* 0.1 / 360
for i in range(1, len(df)):
df.loc[i, 'Balance'] = df.loc[i-1,'Balance']+df.loc[i+0,'AccrualCoupon']- df.loc[i+0,'AccrualYield']
print(df)
结果如下:
Dates No of Days AccrualCoupon AccrualYield Balance
0 March 15th, 2020 0 0.000000 0.000000 500.00
1 August 15th, 2020 150 2.083333 20.833333 481.25
2 February 15th, 2021 180 2.500000 NaN NaN
3 May 19th, 2021 94 1.305556 NaN NaN
仅为1行计算了应计收益率和余额的值。有人能帮我把剩下的行相应地更新一下吗。预期产量如下所示
Dates No of Days AccrualCoupon AccrualYield Balance
0 March 15th, 2020 0 0.000000 0.000000 500.00
1 August 15th, 2020 150 2.083333 20.833333 481.25
2 February 15th, 2021 180 2.500000 24.06 459.69
3 May 19th, 2021 94 1.305556 12.00 448.99
您真的可以实现这种逻辑,而无需循环。也许可以添加一个示例数据来说明您试图实现的目标。从第2行开始的应计收益率将根据以前的日期余额进行计算。从第2行开始的余额将是(上一行的余额+同一行的应计收益率-同一行的应计收益率)。上面分享的预期输出我并没有认真考虑过这一点,但是通过
i+0
索引东西是很奇怪的。你是说+不是零?好的,我现在读代码了。问题是,您正在为循环分别执行操作。在第一个循环中,第一次迭代-它将在第一行(索引0)中找到余额
的值,因此它将能够填充应计收益
。但是从第二次迭代开始,您将在前一行中没有Balance
的值。只需将两个属性放在同一个for循环中(首先是应计收益率
。然后是余额
)@vmg。非常感谢你的宝贵帮助。它正在按预期工作