这是代码:
for e in range(1, len(db.index)):
g.append((db.iloc[e + 1, 1] - db.iloc[e, 1]) * 100.0 / db.iloc[e, 1])
数据帧(db)有2个列和284行。我试图找到第二列的平均增长率。我已经尝试了所有方法,但是无法正常工作。
答案 0 :(得分:0)
如果您想使用e+1
进行索引,则您的范围太长了一步。试试:
for e in range(1, len(db.index) -1): # one step shorter
g.append((db.iloc[e + 1, 1] - db.iloc[e, 1]) * 100.0 / db.iloc[e, 1])
答案 1 :(得分:0)
与其使用range()
函数,不如通过索引进行迭代,这是更安全的:
for e in db.index:
g.append((db.iloc[e+1, 1] - db.iloc[e, 1]) * 100.0 / db.iloc[e,1])
您还可以进一步优化此代码,并完全摆脱for循环,即:
db.iloc[:,1].diff().multiply(100).div(db.iloc[:,1].shift())
此代码将返回一个pd.Series
,您可以将其分配给g
:
g = db.iloc[:,1].diff().multiply(100).div(db.iloc[:,1].shift())
或附加到它已经包含一些数据的地方:
g = pd.concat([g, db.iloc[:,1].diff().multiply(100).div(db.iloc[:,1].shift())
])
如果您遵循我的建议,那么您也可以立即使用第1列的名称,而不是使用iloc
切片器,以获得更好的清晰度。