You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ln(x_t/x_t-1)计算DataFrame增长率时出现值重复问题求助

解决DataFrame中计算对数增长率出现重复值的问题

原代码错误原因

  1. 循环内每次赋值都是给整个列,最终全列会被最后一次循环的计算结果覆盖(最后一次循环计算的是t4与t3的对数比值,即ln(28/20)=0.336472)
  2. 当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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:22:18