2017-09-01 14 views
0

におけるデータフレームの列にループのための私のデータは次のようである:パイソン

import numpy as np 
import pandas as pd 
s = pd.Series([True,True,True,False,True,False, False, True]) 

及びIは、互いに隣接している「真」行に同じ値(1から始まる)を割り当てます。 "False"の値に0を代入します。

だから、最終的な結果は次のようにする必要があります:

enter image description here

ここで私が書いたコードです。私はエラーはありませんが、それは永遠に実行されているようなコードを実行することはできません。 (私はなぜ知らない!)

s['values'] = None 
j = 0 
for ii in range(1, len(list1)): 
    if list1['delay'].iloc[ii] != list1['delay'].iloc[ii-1]: 
     j += 1 
    s['values'][ii] = j 

は(私が1からループのために始めた、私は私が手動で最初の値を変更しますと思ったので)

はこれで私を助けてください。

答えて

1

私は手順を打破、これを試してみてください。:)

import numpy as np 
import pandas as pd 
s = pd.Series([True,True,True,False,True,False, False, True]) 
b=s 
b=b.astype(int).diff().fillna(0) 
b=b.ne(0) 
b[~s]=False 
b=b.cumsum()+1 
b[~s]=0 
b 
Out[116]: 
0 1 
1 1 
2 1 
3 0 
4 2 
5 0 
6 0 
7 3 
dtype: int32 

またはループのために使用した。..

ll=[] 

j=0 
for i in range(0, len(s)): 
    if s[i]: 
     j += 1 
     try: 
      if s[i-1]: 
       j-=1 
       ll.append(j) 
      else: 
       ll.append(j) 
     except:ValueError 


    else: 
     ll.append(0) 
[1]+ll 

Out[135]: [1, 1, 1, 0, 2, 0, 0, 3]