我试图创建一个循环,它将根据列中以前的值填充列
基本上,我想看看前一行中的“购买列”是否等于1,如果是这样,我希望“持有列”包含5,直到“卖出支票”列显示为1,此时我希望持有列显示为a-1
我试过:
dt['Hold'] = pd.np.where(dt['Purchase'].shift(1) ==1, pd.np.where(dt['Sell_Check'] != 1,5,-1),pd.np.where(dt['Hold'].shift(1) == 5 , pd.np.where(dt['Sell_Check'] != 1,5,-1),0 ) )
第一部分做得很好,但直到卖出支票=1时,才继续增加5
我也试过:
for i in range (1, len(dt)):
if dt.loc[i-1, 'Purchase'] == 1 and dt.loc[i, 'Sell_Check'] != 1:
dt.loc[i , 'Hold'] = 5
elif dt.loc[i-1, 'Hold'] == 5 and dt.loc[i, 'Sell_Check'] != 1:
dt.loc[i, 'Hold'] = 5
elif dt.loc[i, 'Sell_Check'] == 1:
dt.loc[i, 'Hold'] = -1
else:
dt.loc[i, 'Hold'] = 0
但是这个返回的“keyrerror:15”并没有告诉我多少
任何帮助都将是非常感谢的,如果我想实现的东西不清楚,请让我知道,我将尝试解释更多
样本数据: 它目前的样子:
Date Purchase Sell_Check Hold
0 20190107 0 0 0
1 20190108 1 0 0
2 20190109 0 0 5
3 20190110 0 0 0
4 20190111 1 0 0
5 20190114 0 1 -1
6 20190115 0 0 0
我希望它看起来像什么:
Date Purchase Sell_Check Hold
20190107 0 0 0
20190108 1 0 0
20190109 0 0 5
20190110 0 0 5
20190111 0 0 5
20190114 0 -1 5
20190115 0 0 -1
使用“记忆功能”定义以下功能:
所提到的“内存特性”实现为prevVal属性 这项职能的作用
此属性将设置为第一次调用之前的初始值(0)
然后,在每个应用程序上(对于df的连续行),此函数:
要获得结果,请应用此函数,将结果保存在Hold列中 (它甚至可能以前不存在):
至于Hold列,结果正是您想要的
在您的预期结果中,我还看到其他列中的一些更改, 但您只写了Hold列中的值设置。 这就是为什么我认为其他列中的更改是您的错误
编辑
如果-1只应返回一次,然后再次返回0,请更改 职能是:
然后在包含另一行的连续 日期和购买和出售检查==0。 最后返回的值将是0
相关问题 更多 >
编程相关推荐