使用复杂规则在数组中复制值的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建议的那样,如果你发布你的代码,我们可以帮助你优化它,否则我们无法知道你目前的方法有什么问题。