Python Pandas:条件滚动计数



这是我的输入数据帧

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

我需要在'type'列的基础上生成ID列。我有两种类型'a'&'b'。。只要是CCD_ 5,我就想递增CCD_。如果是'b',则保留以前的'a'ID。如何在Pandas数据帧中做到这一点?

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

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

我试过这种方法,显然@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

如果您的DataFrame是df:

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

最新更新