我需要有关序列创建的问题的帮助。
序列应基于的值
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万条记录,而且速度太慢。 有任何想法吗?
答案 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()