Python 如何迭代计算新列中的一组值
我正在尝试使用另一列“rand_price”创建一个新列“roc_30d”。新列基本上是30天内的变化率。公式为(当前价格-30个周期前的价格)/(30个周期前的价格) 我试图迭代“rand_price”以计算新列的值。但是,没有用。如果您有任何建议,我将不胜感激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值。理想情况下,我希望
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
。您有几个问题:
( [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查找缺少的值:)