使用复杂规则在数组中复制值的Python方式

使用复杂规则在数组中复制值的Python方式,python,Python,如果列a中的值为1,则b的值将复制到列c中,直到a为-1 在下面的示例中,a在第2行中为1,在第5行中为-1。然后将列b(13)中的第二个值从第2行复制到列c 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

如果列
a
中的值为1,则
b
的值将复制到列
c
中,直到
a
为-1

在下面的示例中,
a
在第2行中为1,在第5行中为-1。然后将列
b
(13)中的第二个值从第2行复制到列
c

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)。非常感谢您的帮助。

这里有一个解决方案,它确实使用了
for
循环,但是非常简洁,同时仍然可以理解

我假设您将数据存储在
表中,其中
a
作为
表[:,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]
我打赌有一些奇特的方法可以摆脱这个循环,但我也打赌很难判断到底发生了什么


我同意其他人的看法,如果你发布你目前拥有的东西,那么从那里开始会有所帮助。

这里有一个解决方案,它确实使用了
进行
循环,但是非常简洁,同时仍然可以理解

我假设您将数据存储在
表中,其中
a
作为
表[:,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]
我打赌有一些奇特的方法可以摆脱这个循环,但我也打赌很难判断到底发生了什么


我同意其他人的看法,如果你发布你当前拥有的东西,那么它将有助于从那里开始。

你可以发布你当前的代码吗?我尝试将其实现为for循环,我的结果看起来非常优雅(假设是2D数组)。它只访问每行一次,最坏的情况是每行4次操作。就像@BrendanLong建议的那样,如果你发布你的代码,我们可以帮助你优化它,否则我们无法知道你当前方法的问题是什么。你可以发布你当前的代码吗?我尝试将其实现为for循环,结果看起来非常优雅(假设是2D数组)。它只访问每行一次,最坏的情况是每行4次操作。就像@BrendanLong建议的那样,如果你发布你的代码,我们可以帮助你优化它,否则我们无法知道你目前的方法有什么问题。