1 回答
TA贡献1828条经验 获得超3个赞
您可以使用布尔索引来返回TrueorFalse一行是否等于零。要使其成为一组中的最后一个,请使用.shift()移动一行。然后,使用.cumsum(), 来获取组:
df['Group'] = (df['Current_Position'].shift() == 0).cumsum()
df
Out[1]:
Current_Position Group
0 2 0
1 4 0
2 2 0
3 0 0
4 2 1
5 0 1
6 2 2
7 0 2
8 1 3
9 2 3
10 0 3
11 2 4
12 1 4
13 0 4
14 1 5
15 2 5
16 1 5
17 0 5
18 1 6
19 0 6
我们曾经
.shift()
将数据向下移动一行。这允许具有值的行0
成为组的最后一行而不是第一行。我们曾经用来
== 0
转换为返回orGroup
的布尔数据类型。布尔系列中的值本质上相当于or ,因此您可以在其上进行其他数学运算。例如,如果我们创建一个数据类型为“df['Group'] = np.where(df['Current Position'] ==”的返回或STRINGS的列,则您将无法执行这些数学运算0、“真”、“假”)。True
False
1
0
.cumsum()
sum
object
'True'
'False'
下面将逻辑分解为三个步骤,因此可以很容易地可视化:
df['Group1'] = df['Current_Position'].shift()
df['Group2'] = (df['Group1'] == 0)
df['Group3'] = df['Group2'] .cumsum()
df
Out[2]:
Current_Position Group1 Group2 Group3
0 2 NaN False 0
1 4 2.0 False 0
2 2 4.0 False 0
3 0 2.0 False 0
4 2 0.0 True 1
5 0 2.0 False 1
6 2 0.0 True 2
7 0 2.0 False 2
8 1 0.0 True 3
9 2 1.0 False 3
10 0 2.0 False 3
11 2 0.0 True 4
12 1 2.0 False 4
13 0 1.0 False 4
14 1 0.0 True 5
15 2 1.0 False 5
16 1 2.0 False 5
17 0 1.0 False 5
18 1 0.0 True 6
19 0 1.0 False 6
添加回答
举报