Python Pandas:条件滚动计数

时间:2018-12-04 12:08:17

标签: python pandas dataframe series

这是我的输入数据框

type
a   
a   
a   
a   
a   
b   
b   
a   
a   
a

这是我的预期输出

type,   id
a   ,   1
a   ,   2
a   ,   3
a   ,   4
a   ,   5
b   ,   5
b   ,   5
a   ,   6
a   ,   7
a   ,   8

我需要基于ID列生成'type'列。我有两种类型'a''b' ..只要是'a'我想增加ID。如果为'b',请保留前一个'a' ID。如何在Pandas数据框中执行此操作?

3 个答案:

答案 0 :(得分:5)

您可以计算布尔序列的累积总和,以指示序列何时等于值:

df['id'] = df['type'].eq('a').cumsum()

答案 1 :(得分:1)

我尝试过这种方式,显然@jpp答案是最酷的一种。但是我只是想给出一个主意。

df=pd.DataFrame({'col1':['a','a','a','a','a','b','b','a','a','a']})
df['type']= df.groupby('col1').cumcount()+1
df.loc[df['col1']=='b','type']=np.NaN
df['type']=df['type'].ffill()
print df

O / P

  col1  type
0    a   1.0
1    a   2.0
2    a   3.0
3    a   4.0
4    a   5.0
5    b   5.0
6    b   5.0
7    a   6.0
8    a   7.0
9    a   8.0

答案 2 :(得分:0)

如果您的DataFrame为df

df[df=='a'].expanding().count()