Python Dataframe未正确添加值(索引)

Python Dataframe未正确添加值(索引),python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,大家好,我用这段代码创建了一个10000的起始值,它应该加上以前的值+(以前的值*Pct变化) 然而,它在第二条生产线之后继续生产NaN 有什么建议吗 df.at[0,'Initial'] = 10000 df.loc[1:99,'Initial'] = df['Initial'].shift(1) + (df['Initial'].shift(1) * df['Pct Change']) Initial 10000.000000 10063.995538 NaN NaN NaN... 我

大家好,我用这段代码创建了一个10000的起始值,它应该加上以前的值+(以前的值*Pct变化)

然而,它在第二条生产线之后继续生产NaN

有什么建议吗

df.at[0,'Initial'] = 10000
df.loc[1:99,'Initial'] = df['Initial'].shift(1) + (df['Initial'].shift(1) * df['Pct Change'])


Initial
10000.000000
10063.995538
NaN
NaN
NaN...
我喜欢首字母中的3行是10063.995538+(10063.995538*0.002827) 但它正在生产NaN 我想知道df.loc[1:99,'Initial']的语法是否错误

我只能通过执行以下操作来正确填充初始值:

Initial         Pct Change
10000.000000    -0.000710
10063.995538     0.006400
NaN              0.002827
NaN              0.009148
NaN              0.000694

但是为什么df.loc[1:99,'Initial']不起作用呢?

在这种操作中,最好使用for循环,即

df.at[0,'Initial'] = 10000
df.loc[1:,'Initial'] = df['Initial'].shift(1) + (df['Initial'].shift(1) * df['Pct Change'])
df.loc[2:,'Initial'] = df['Initial'].shift(1) + (df['Initial'].shift(1) * df['Pct Change'])
df.loc[3:,'Initial'] = df['Initial'].shift(1) + (df['Initial'].shift(1) * df['Pct Change'])
`....`
初始Pct变化 0 10000.000000 -0.000710 1 10064.000000 0.006400 2 10092.450928 0.002827 3 10184.776669 0.009148 4 10191.844904 0.000694
当涉及到这种操作时,最好使用for循环,即

df.at[0,'Initial'] = 10000
df.loc[1:,'Initial'] = df['Initial'].shift(1) + (df['Initial'].shift(1) * df['Pct Change'])
df.loc[2:,'Initial'] = df['Initial'].shift(1) + (df['Initial'].shift(1) * df['Pct Change'])
df.loc[3:,'Initial'] = df['Initial'].shift(1) + (df['Initial'].shift(1) * df['Pct Change'])
`....`
初始Pct变化 0 10000.000000 -0.000710 1 10064.000000 0.006400 2 10092.450928 0.002827 3 10184.776669 0.009148 4 10191.844904 0.000694
不需要循环,请查看
cumprod

Initial Pct Change 0 10000.000000 -0.000710 1 10064.000000 0.006400 2 10092.450928 0.002827 3 10184.776669 0.009148 4 10191.844904 0.000694
不需要循环,请查看
cumprod

Initial Pct Change 0 10000.000000 -0.000710 1 10064.000000 0.006400 2 10092.450928 0.002827 3 10184.776669 0.009148 4 10191.844904 0.000694

initial
的初始值是多少?您好,我使用了df。在[0,'initial']=10000时,除了您的代码中的这两行之外,我没有任何其他关于initial的行。我假设您想做一些迭代计算。不幸的是,这段代码不会让你走得太远,因为它对
Initial
列中的当前值起作用,除了第一列之外,所有这些值碰巧都是
NaN
。为什么这段代码不继续累加?因为它假设加上先前的值+(先前值的Pct变化),我不明白为什么它停在第二行。假设代码从10000开始,然后继续将Pct更改添加到以前的值中(例如,如果第三行的值应该是10063.995538+(10063.995538*Pct更改),添加
df.head(5)
和预期输出,这样我们就可以清楚地知道您想要什么了。
initial
的初始值是什么?我在[0,'initial']=10000除了代码中的这两行之外,我没有其他关于Initial的行。我假设您想做一些迭代计算。不幸的是,这段代码不会让您走得很远,因为它对
Initial
列中的当前值起作用,所有这些值都恰好是
NaN
第一列。为什么这段代码不继续累加?既然它假设要加上上上一个值+(上一个值的Pct变化),我不明白为什么它停在第二行。代码假设从10000开始,然后继续将Pct变化添加到上一个值(例如,如果第三行,它应该是10063.995538+(10063.995538*Pct变化)添加
df.head(5)
和预期输出,这样我们就可以清楚地知道您想要什么。我在分析它。我在分析它。太棒了。非常好。*10000我花了一段时间才理解。这就是为什么我添加了numpy标记。通常是numpywins@Bharathshetty只是一个多…~:)通常我在concat上使用*10000来扩展数据帧。这就是为什么我花了一些时间。从两端取公共值,在末尾相乘。我真的很欣赏你的数学技能:)我试着测试Bharath和Wen答案的速度(Wen ans给我2.3秒,而Barath 5.7秒,因为循环),无论如何,谢谢你们太棒了。非常好*我花了一段时间才明白。这就是我添加numpy标签的原因。通常是裸体wins@Bharathshetty通常我在concat上使用*10000来扩展数据帧。这就是为什么我花了一些时间。从两端取公共值,在末端相乘。我真的很欣赏你的数学技能:)我试着测试巴拉斯和文的答案的速度(文安给我2.3秒,而巴拉斯给我5.7秒,因为循环),无论如何谢谢你们