Pandas - 使用 cumsum 或 cumcount 分组

Pandas - Groupby with cumsum or cumcount

我有以下数据框:

       Vela    FlgVela  
0         R      0
1         V      1      
2         V      1      
3         R      1      
4         R      1
5         V      0
6         R      1
7         R      1
8         R      1

获得下面数据框结果的最佳方法是什么?

       Vela    FlgVela  AddCol
0         R      0         1
1         V      1         2
2         V      1         2
3         R      1         3
4         R      1         3
5         V      0         4
6         R      1         5
7         R      1         5
8         R      1         5
  

我尝试了以下逻辑,但结果不是我所期望的。

df['AddCol'] = df.groupby(df['Vela'].astype(str).str.strip() !=  df['Vela'].shift(-1).astype(str).str.strip() ).cumcount()+1

我认为你很接近,这是一种方法:

df["AddCol"] = df.groupby("Vela").ngroup().diff().ne(0).cumsum()

我们首先得到每个不同 Vela 所属的组号(某种因式分解),然后取第一个差异,看看它们是否不等于 0。这将给出“转向”从一组指向另一组。然后我们把它们累加起来,

获得

>>> df

  Vela  FlgVela  AddCol
0    R        0       1
1    V        1       2
2    V        1       2
3    R        1       3
4    R        1       3
5    V        0       4
6    R        1       5
7    R        1       5
8    R        1       5

不需要对数据帧进行分组。我们可以比较相邻的行来创建一个布尔掩码,然后计算这个掩码的累积和来创建一个计数器

df['AddCol'] = df['Vela'].ne(df['Vela'].shift()).cumsum()

  Vela  FlgVela  AddCol
0    R        0       1
1    V        1       2
2    V        1       2
3    R        1       3
4    R        1       3
5    V        0       4
6    R        1       5
7    R        1       5
8    R        1       5