将计数添加到 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)
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)