使用复杂规则复制数组中值的Pythonic方法

时间:2012-05-30 02:04:18

标签: python

如果列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)。非常感谢您的所有帮助。

1 个答案:

答案 0 :(得分:1)

这是一个使用for循环的解决方案,但是非常简洁,同时仍然可以理解。

我假设您将数据存储在table中,atable[:,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]

我敢打赌,有一些奇特的方法可以摆脱这种循环,但我也打赌,它更难分辨出发生了什么。

我同意其他人的意见,如果你发布你现在拥有的东西,那么就可以从那里开始。