python中dataframe列上的For循环

python中dataframe列上的For循环,python,pandas,for-loop,Python,Pandas,For Loop,我的数据如下: import numpy as np import pandas as pd s = pd.Series([True,True,True,False,True,False, False, True]) 我想将相同的值从1开始分配给彼此相邻的真实行。并将0指定给假值 所以最终的结果应该是这样的: import numpy as np import pandas as pd s = pd.Series([True,True,True,False,True,False, False,

我的数据如下:

import numpy as np
import pandas as pd
s = pd.Series([True,True,True,False,True,False, False, True])
我想将相同的值从1开始分配给彼此相邻的真实行。并将0指定给假值

所以最终的结果应该是这样的:

import numpy as np
import pandas as pd
s = pd.Series([True,True,True,False,True,False, False, True])
这是我写的代码。我没有得到任何错误,但它无法执行它似乎永远运行的代码。我不知道为什么

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开始for循环,因为我认为我将手动更改第一个值


请帮我做这个

试试这个,我把步骤分解了

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
或者使用for循环

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]