1

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

在下面的示例中,a第 2 行中为 1,第 5 行中为 -1。然后将第b(13) 列中的第二个值从第 2 行复制c到第 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)。非常感谢您的所有帮助。

4

1 回答 1

1

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

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

我敢打赌,有一些奇特的方法可以摆脱这个循环,但我也敢打赌,很难说出发生了什么。

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

于 2012-05-30T02:23:52.990 回答