Python 如何迭代计算新列中的一组值

Python 如何迭代计算新列中的一组值,python,pandas,iteration,Python,Pandas,Iteration,我正在尝试使用另一列“rand_price”创建一个新列“roc_30d”。新列基本上是30天内的变化率。公式为(当前价格-30个周期前的价格)/(30个周期前的价格) 我试图迭代“rand_price”以计算新列的值。但是,没有用。如果您有任何建议,我将不胜感激 for i in df['rand_price']: results = (i-(i-30) / (i-30)) df['roc_30d'] = results 最后,变量i和结果只有1个nan值。理想情况下,我希望

我正在尝试使用另一列“rand_price”创建一个新列“roc_30d”。新列基本上是30天内的变化率。公式为(当前价格-30个周期前的价格)/(30个周期前的价格)

我试图迭代“rand_price”以计算新列的值。但是,没有用。如果您有任何建议,我将不胜感激

for i in df['rand_price']:
    results = (i-(i-30) / (i-30))
    df['roc_30d'] = results
最后,变量i和结果只有1个nan值。理想情况下,我希望新的专栏看到附加的png

i-(i-30) / (i-30)
这在代数上等同于
i-1
。您有几个问题:

  • 你从当前价格中减去30。你说你想要的是30天前的价格。为此,您需要遍历行,而不是一列中的值,以便获得行号。从行号中减去30,然后使用该行号查找30天前的值
  • 你的代数错了。比率的公式是数值差除以时间段。你将一个数量除以它本身,然后从当前价格中减去它。相反,试试
  • 。。。这个

    ( [current_value] - [30_day_old_value] ) / 30
    

    您可能希望通过有关PANDAS数据帧的教程来学习使用下标访问特定值的方法以及
    loc
    iloc
    功能。

    PANDAS数据帧不是为迭代而设计的;它们是为矢量化计算而设计的:

    df['roc_30d'] = df['rand_price'].apply(lambda x: x - (x-30) / (x-30))
    

    但是,请注意,指定的公式的计算结果为(x-1),因此我怀疑您需要处理这个问题。(@Prune也有一个解决这个问题的答案,所以我不赘述。)

    你的公式正确吗<代码>(i-(i-30)/(i-30))。什么是
    (i-30)
    编辑您的问题,以包括数据帧的
    数据类型
    ,并正确格式化代码块。让我们知道日期在哪里,我很抱歉,因为我是python新手。那么你要说的是迭代行,使用索引减30,然后使用iloc得到30天前的值?非常感谢您的评论!你好,谢谢你的澄清!在我进行计算之前,我必须对如何获取n个周期前的值做更多的研究。有一个滞后功能可以帮助您访问n个周期前的值。但是,如果您的时间序列有间隔(例如,没有周末数据),“之前30个时段”将与“之前30个日历日”不同。我已经找到了如何进行以下计算的方法。我使用df.shift函数将显示30天延迟的列设置到一个新列上。然后使用这两列为计算创建列“roc”。是的,注意到日历日。然后我添加了weekends,并使用ffill查找缺少的值:)