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
添加回答
舉報