将计数添加到 Pandas 中的先前单元格值

Adding a count to prior cell value in Pandas

in Pandas 我希望根据另一列 'A' 中的布尔值在一列 'B' 中添加一个值。因此,如果 'A' 为真,则只要 'A' 为假,就开始计数(即每换行加一个)。当 'A' 为 True 时重置并重新开始计数。我设法用 'for' 循环来做到这一点,但这非常耗时。我想知道是否有更省时的解决方案?

结果应如下所示:

Date     A      B 
01.2010 False   0
02.2010 True    1
03.2010 False   2
04.2010 False   3
05.2010 True    1
06.2010 False   2

您可以使用 cumsum with groupby and cumcount:

print df
    Date      A
0  1.201  False
1  1.201   True
2  1.201  False
3  2.201   True
4  3.201  False
5  4.201  False
6  5.201   True
7  6.201  False
roll = df.A.cumsum()
print roll
0    0
1    1
2    1
3    2
4    2
5    2
6    3
7    3
Name: A, dtype: int32

df['B'] = df.groupby(roll).cumcount() + 1
#if in first values are False, output is 0
df.loc[roll == 0 , 'B'] = 0   
print df
    Date      A  B
0  1.201  False  0
1  1.201   True  1
2  1.201  False  2
3  2.201   True  1
4  3.201  False  2
5  4.201  False  3
6  5.201   True  1
7  6.201  False  2

谢谢,我从另一个 post 得到了类似这样的解决方案:

rolling_count = 0
def set_counter(val):

  if val == False: 

    global rolling_count  
    rolling_count +=1

  else:

    val == True
    rolling_count = 1

  return rolling_count

df['B'] = df['A'].map(set_counter)