数据:
day cost new_column
1 1 0
2 1 0
3 5 enter position
4 3 stay in position
5 10 stay in position
6 1 exit position
7 1 0
您好,我想知道是否有一种方法可以在不循环和使用loc / iloc的情况下引用计算列中的上一行。在上面的示例中,我要计算此“ new_column”。一旦费用达到5,我想输入职位。一旦我处于头寸中,我希望能够在下一行上检查我是否已经处于头寸中,并检查价格是否为1。如果是,那么我将停留在该头寸中。我打到的第一行的成本为1,而上一个“ new_column”是“保持位置”,我想设为“退出位置”。然后,下一行为1的'new_column'应该回到零。
我现在要解决的方法是遍历每一行,查看第i行的成本和第i-1行的new_column的状态,然后将结果插入第i行的new_column中。
这需要花费大量时间处理大型数据集,我想找到一种更有效的处理方法。我查看了list(map()),但没有看到引用上一行的方法,因为我认为尚未创建要引用的数据。有什么想法吗?
谢谢
答案 0 :(得分:2)
嘿,因为smj建议一种选择是使用shift。
day = list(range(1,8))
cost = [1,1,5,3,10,1,1]
import pandas as pd
import numpy as np
df = pd.DataFrame({'day':day,'cost':cost}, columns = ['day', 'cost'])
print(df)
df['new'] = np.where(df['cost']> 1, np.where(
df['cost'].shift(-1) >=1,
'stay','a'
),
np.where(
df['cost'].shift()>1, 'exit', 0
)
)
print(df)