在熊猫中,我希望根据另一列“ A”中的布尔值在一个列“ B”中添加一个值。因此,如果“ A”为True,则只要“ A”为false,就开始计数(即每行增加一个)。当“ A”为真时,重置并重新开始计数。我设法通过“ 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
与groupby
和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