简体   繁体   中英

For loop on a column of dataframe in python

My data is like this:

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

and I want to assign the same values(starting from 1) to the "True" rows which are adjacent to each other. And assign 0 to "False" values.

So the final result should be like this:

enter image description here

Here is the code I've written. I do not get any error but it cannot execute the code it seems running forever. (I don't know why!)

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

(I've started the for loop from 1 since I thought I will change the first value manually)

Please help me with this.

Try this , I break down the steps.:)

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

Or using for loop ..

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]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM