Pandas DF-基于无for循环的条件创建增量序列

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

标签: python pandas dataframe sequence

我需要有关序列创建的问题的帮助。

序列应基于的值 ID_PROJET_test字段包含一个布尔值,该布尔值指示我们是否应该增加。

如果ID_PROJET_test = False,则递增
如果ID_PROJET_test = True不增加

例如,如果ID_PROJET_test包含以下系列:s1 = [0,0,1,0,1,0]

ID_PROJET应该等于:[1,2,2,3,3,4]

If ID_PROJET_test包含以下系列:s2 = [0,0,0,1,1,1,0,0]

ID_PROJET应该等于:[1,2,3,3,3,3,4,5]

我可以使用for循环轻松做到这一点:

compteur = 1
for i in range(len(df)):
    if df['ID_PROJET_test']==True:
        df.ID_PROJET[i] = compteur
    else:
        compteur += 1
        df.ID_PROJET[i] = compteur

但是,我有大约180万条记录,而且速度太慢。 有任何想法吗?

1 个答案:

答案 0 :(得分:4)

如果翻转0/1值,则可以使用cumsum()

s1 = pd.Series([0,0,1,0,1,0])

(~s1.astype(bool)).cumsum()
0    1
1    2
2    2
3    3
4    3
5    4
dtype: int64

s2 = pd.Series([0,0,0,1,1,1,0,0])

(~s2.astype(bool)).cumsum()
0    1
1    2
2    3
3    3
4    3
5    3
6    4
7    5
dtype: int64

还请注意@Jon Clement的紧凑性:

(s1 ^ 1).cumsum()