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
我有以下数据框:
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