我想知道下面是否可以在python / pandas数据帧中完成。具体来说,我希望首先在我的数据框中找到一个观察点,例如:value = 1,如果是这种情况,我想将该列中的下n行填充为1。
这是我的数据框架的样子
Index Date Open High Low Close Long
0 19970101 500 501 499 501.5 0
1 19970102 501.5 505 499 502.5 0
2 19970103 503 507 503 506.5 0
3 19970104 503 507 503 506.5 1 (first instance)
4 19970105 503 507 503 506.5 1 (change here)
5 19970106 503 507 503 506.5 0 (change here)
6 19970107 503 507 503 506.5 -1 (reset)
7 19970108 503 507 503 506.5 0
8 19970109 503 507 503 506.5 1 (second instance)
所以在Long = 1(检查索引= 6)的情况下,我想要下面的n行(假设n = 2,因此索引7,列Long中的8)也是1.如果它已经是1或者如果它是无论如何它的0.
当Long = -1时,我们重置并寻找下一个Long = 1
长只能是0,1或-1
任何帮助,文档都会很棒 - 谢谢!
答案 0 :(得分:0)
我不确定是否有办法对其进行矢量化,但这里的代码应该可行。
n = 2
fill_counter = 0
longs = []
for i, val in enumerate(df.Long):
if val == 1 and not fill_counter:
# First observed value of 1.
fill_counter = n + 1
if fill_counter:
fill_counter -= 1
longs.append(1)
continue
longs.append(val)
df['Long'] = longs
>>> df
Date Open High Low Close Long
0 19970101 500.0 501 499 501.5 0
1 19970102 501.5 505 499 502.5 0
2 19970103 503.0 507 503 506.5 0
3 19970104 503.0 507 503 506.5 1
4 19970105 503.0 507 503 506.5 1
5 19970106 503.0 507 503 506.5 1
6 19970107 503.0 507 503 506.5 -1
7 19970108 503.0 507 503 506.5 0
8 19970109 503.0 507 503 506.5 1