我需要对一个数据框进行操作,该操作需要使用多行输入。以简单的示例说明,如果所有输入都来自单个行,则可以执行以下操作:
df['c'] = df[['a','b']].apply(lambda x: awesome stuff, axis=1)
# or
df['d'] = df[['b','c']].shift(1).apply(...) # to get the values from the previous row
然而,如果我需要当前行的'a'和前一行的'b',有没有一种方法可以使用apply完成呢?我可以添加一个新的'bshift'列,然后只使用df[['a','bshift']],但似乎应该有更直接的方法。
相关但独立的是,在访问df中的特定值时,是否有一种方法将标记索引与整数偏移量结合起来?例如,我知道当前行的标签,但需要前一行。类似于
df.at['labelIknow'-1, 'a']
(当然不起作用)。这是当我被迫遍历行时使用的。提前致谢。编辑:一些关于我的工作内容等信息。我有一个包含OHLC条形图的pandas存储(每个证券一个表)。在进行回测时,目前我将需要安全性的完整日期范围拉入内存,然后将其重新采样为适合手头测试的频率。然后我执行一些矢量化操作,例如交易进入信号等。最后,我循环遍历从开始到结束的数据,执行实际的回测,例如检查交易进出口、回撤等——这个循环部分是我试图加速的部分。
apply()
不是开始的正确方法。 - FooBarApply()
)并不能神奇地使您的代码更快。如果有一种操作可以在列方向上预先计算一些值,那么您应该事先这样做。(就像您已经做的那样,移动列就是其中之一)。 - FooBar