使用ln(x_t/x_t-1)计算DataFrame增长率时出现值重复问题求助
解决DataFrame中计算对数增长率出现重复值的问题
原代码错误原因
- 循环内每次赋值都是给整个列,最终全列会被最后一次循环的计算结果覆盖(最后一次循环计算的是
t4与t3的对数比值,即ln(28/20)=0.336472) - 当
row=0时,row-1=-1,df.iloc[-1,1]取的是最后一行的现金流(28),这不符合业务逻辑,因为t1没有前一期数据
正确实现方式
不用循环,直接用pandas的shift()函数获取前一期数据,一次性完成计算:
import pandas as pd import math as mt data = [['t1',9],['t2',16],['t3', 20], ['t4', 28]] df = pd.DataFrame(data,columns=['Name','Cash_Flow'],dtype=float) # 计算对数增长率,shift(1)获取前一期的Cash_Flow df['ln(CF_t/CF_t-1)'] = mt.log(df['Cash_Flow'] / df['Cash_Flow'].shift(1))
正确运行结果
Name Cash_Flow ln(CF_t/CF_t-1) 0 t1 9.0 NaN 1 t2 16.0 0.575364 2 t3 20.0 0.223144 3 t4 28.0 0.336472
说明:第一行结果为NaN是合理的,因为t1没有对应的前一期现金流数据。
内容的提问来源于stack exchange,提问作者Francisco Minchala Fajardo
相关产品推荐
相关产品推荐

