跳过元素或填充元素

时间:2016-04-11 19:46:46

标签: python pandas

我想知道下面是否可以在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

任何帮助,文档都会很棒 - 谢谢!

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