【发布时间】:2021-05-17 20:47:34
【问题描述】:
我正在尝试用 df2 的第一列填充 df1 的 ['A'] 列,并执行(5 年)滚动复合增长计算。但是当我在代码下面运行时,计算机进入了无限循环。我做错了什么?
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.randint(0,100,size=(15, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.zeros((15, 4)), columns=list('ABCD'))
for ind in df1.index:
while len(df1.index) >(6+ind):
amount_start= df1.iloc[0+ind,0]
amount_end = df1.iloc[6+ind,0]
df2['A'][ind] =((amount_start/amount_end)**(1/5))-1
----------更新------------------------ -----
所以只是为了解释得更好一点。我有一个多索引数据框,其中包含不同年份的不同代码,并希望为每个代码获取一个新的 CAGR 列(在本例中为 3y。Akshay 发布的代码效果很好,但由于它仅适用于一个代码,我将其更改为groupby 方法,但现在我无法将系列附加到我的 Dataframe。最好的方法是什么?我在下面附上了屏幕截图。
windows = df.groupby('Symbol').rolling(1+3) df2 = windows['Revenue'].apply(lambda x: (x.iloc[0]/x.iloc[-1])**(1/3)-1)
[CAG_3y][1]:https://i.stack.imgur.com/SgeNK.png
【问题讨论】:
-
也许你的 while 循环中没有任何东西会改变 ind 的值,所以它永远不会退出。
-
请提供预期的输出,谢谢!请阅读minimal reproducible example
-
您要进行的计算究竟是什么? ind 的值永远不会改变,它始终是 1。您可能应该编辑您的问题,因为我很确定您要复制到 df2 的是 df1 中的(随机)值,而不是 df2 到 df1 中的零。
-
@norie,我对你的意思有点困惑
ind never changes。有一个循环将ind值修改为0-14 之间的值。for ind in df1.index:。澄清一下,谢谢! -
问题似乎出在
while循环内,其中ind不会改变并且无限地保持等于0。是这个意思吗?