2016-12-29 60 views
0

有没有办法让我的循环工作没有错误,因为没有下一个值?或者根本不使用foor循环?Python循环与下一行值

在这个函数下面我还有另外一个功能与一个循环:

def funcA(self,perc,bloc): 
    def funcA1(self): 
     maxIndex = len(self) 
     localiz = self.loc 
     for x in range(0,maxIndex-1): 
      if localiz[x,bloc] == localiz[x+1,bloc]: 
       localiz[x,"CALC"] = True 
      else: 
       localiz[x,"CALC"]= False 
     return self 

我得到了它首先创建列“CALC”工作,因为我DF的最后一行将永远是。但肯定有更好的办法。

编辑 我基本上使用熊猫和numpy这个代码。

集团我使用的功能是ID列 的数据结构,我工作是这样的:

ID NUMBER 
2 100 
2 150 
3 500 
4 100 
4 200 
4 250 

和预期的结果是:

ID NUMBER CALC 
2 100  True 
2 150  False 
3 500  False 
4 100  True 
4 200  True 
4 250  False 
+2

瑕疵有点问题:'def funcA1(self):'后面没有任何代码块。 – CodenameLambda

+0

'localiz'是什么样的数据结构? (你如何使用'localiz [x,“CALC”]'访问元素?) –

+0

@CodingLambdas:这只是我的函数的摘录。 funcA1嵌套在funcA – srWasabi

回答

0

因为我不熟悉这个矢量式的解决方案那个numpy给了我们,我想我无法充分利用所提出的解决方案。

我没有找到一个方法来克服循环我用的是虽然:

def funcA(self,perc,bloc): 
    def new_funcA1(self): 

     df = self[[bloc]] 
     self['shift'] = df.shift(-1) 
     self['CALC'] = self[bloc] == self['shift'] 
     self.drop('shift', axis=1, inplace=True) 
     return self 

随着pandas.DataFrame.shift(-1)的最后一行将返回NaN的。这样我就不必为第一行或最后一行做任何调整,我就摆脱了循环!

1

一个pythonic的方法是这样的:

lst = [char for char in 'abcdef'] 
print(lst) 
for i, (cur, nxt) in enumerate(zip(lst, lst[1:])): 
    print(i, cur, nxt) 

只需注意cur将只运行到倒数第二个元素lst

这将打印:

['a', 'b', 'c', 'd', 'e', 'f'] 
0 a b 
1 b c 
2 c d 
3 d e 
4 e f 

i处于cur元件的lst索引。

lst[1:]创建一个不包含第一个元素的新列表。如果您的名单很长,您可以考虑用islice替换该部分;这样没有额外的副本。


这也适用,如果你的arr是n维数组numpy

import numpy as np 

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]], np.int32) 
print(arr) 
for i, (cur, nxt) in enumerate(zip(arr, arr[1:])): 
    print(i, cur, nxt) 

与输出继电器:

[[1 2 3] 
[4 5 6] 
[7 8 9]] 
0 [1 2 3] [4 5 6] 
1 [4 5 6] [7 8 9] 
+0

它并不完全回答问题,因为@srWasabi没有使用列表,但可能是字典。 – CodenameLambda

+0

@CodingLambdas:你提到它:语法'localiz [x,“CALC”]'看起来更像是一个numpy数组。哦,不,实际上; '“CALC”'不会被接受为索引。那是什么样的数据结构?! –

+0

我的猜测是''dict'''tuple''作为关键字,因为'a [b,c]'相当于'a [(b,c)]''。或者它是由图书馆或@srWasabi建立的一个数据结构。 – CodenameLambda