如果列a
中的值为1,则b
的值将复制到c
列中,直到a
为-1。
在下面的示例中,a
在第2行中为1,在第5行中为-1。然后第b
(13)列中的第二个值从行c
中复制2至5。
row a b c
1 0 12 0
2 1 13 13
3 0 15 13
4 0 2 13
5 -1 19 13
6 0 34 0
7 0 11 0
8 1 23 23
9 0 14 23
10 -1 9 23
11 0 18 0
12 0 19 0
我用for循环完成了这个,但是必须有更优雅的方法来操作系列(我正在使用pandas,numpy)。非常感谢您的所有帮助。
答案 0 :(得分:1)
这是一个使用for
循环的解决方案,但是非常简洁,同时仍然可以理解。
我假设您将数据存储在table
中,a
为table[:,0]
,而a
始终显示为(1,-1)*, 0穿插。
starts = table[:,0] == 1
ends = table[:,0] == -1
for start, end in zip(starts.nonzero()[0], ends.nonzero()[0]):
table[start:end+1,2] = table[start,1]
我敢打赌,有一些奇特的方法可以摆脱这种循环,但我也打赌,它更难分辨出发生了什么。
我同意其他人的意见,如果你发布你现在拥有的东西,那么就可以从那里开始。