2012-05-30 41 views
1

如果列a中的值爲1,則在c中複製b的值,直到a爲-1。使用複雜規則複製數組中值的Python方法

在下面的例子中,是a 1行2和行5然後,在列b(13)的第二個值-1 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循環做了這個,但是必須有更優雅的方式來做這個操作系列(我使用熊貓,numpy)。非常感謝您的幫助。

+2

你可以發佈你的當前代碼嗎? –

+0

我試圖將它作爲for循環來實現,而且我的結果看起來非常優雅(假設是2D數組)。它每次只訪問一行,並且每行有4個操作的最壞情況。就像@BrendanLong建議的那樣,如果你發佈你的代碼,我們可以幫助你優化它,否則我們無法知道你目前的方法存在什麼問題。 – acattle

回答

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] 

我敢打賭,有擺脫這個循環的一些奇特的方式,但我也敢打賭它很難講這是怎麼回事。

我同意其他人的看法,如果你發佈你現在擁有的東西,那麼它會幫助你從那裏走。