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

时间:2016-05-08 11:33:46

标签: python pandas dataframe counter

在Pandas中我想在一栏中添加一个值' B'取决于另一列的布尔值' A'。所以,如果' A'为真,然后开始计数(即每个新行添加一个),只要' A'是假的。当' 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

2 个答案:

答案 0 :(得分:1)

您可以将cumsumgroupbycumcount

一起使用
<DEFAULT, IN_BODY> SPECIAL_TOKEN : {
  " " | "\t" | "\n" | "\r" | "\f"
}

<DEFAULT> TOKEN : {
  <FEATURE: "Feature: " >
| <#LETTER: ["\u0027", "\u0041"-"\u005a", "\u005f", "\u0061"-"\u007a"] >
| <FEATURE_NAME: (<LETTER>)+ >
| <ENDFEATURETITLE: "#TITLEEND" >
}

<DEFAULT> TOKEN : { <BODYSTART : "#BODYSTART"> : IN_BODY }
<IN_BODY> TOKEN : { <TEXT : ~[] > }

<IN_BODY> TOKEN : { <BODYEND : "#BODYEND"> : DEFAULT } 

GRAMMARSTART

Feature:
    <FEATURE> FeatureName <ENDFEATURETITLE>
    Body
    <EOF>;
FeatureName: <FEATURE_NAME>;
Body: <BODYSTART> Text <BODYEND>;
Text: (<TEXT>)*;

答案 1 :(得分:0)

谢谢,我从另一篇类似的帖子中得到了解决方案:

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)