1 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以使用布爾索引來(lái)返回TrueorFalse一行是否等于零。要使其成為一組中的最后一個(gè),請(qǐng)使用.shift()移動(dòng)一行。然后,使用.cumsum(), 來(lái)獲取組:
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
我們?cè)?jīng)
.shift()
將數(shù)據(jù)向下移動(dòng)一行。這允許具有值的行0
成為組的最后一行而不是第一行。我們?cè)?jīng)用來(lái)
== 0
轉(zhuǎn)換為返回orGroup
的布爾數(shù)據(jù)類(lèi)型。布爾系列中的值本質(zhì)上相當(dāng)于or ,因此您可以在其上進(jìn)行其他數(shù)學(xué)運(yùn)算。例如,如果我們創(chuàng)建一個(gè)數(shù)據(jù)類(lèi)型為“df['Group'] = np.where(df['Current Position'] ==”的返回或STRINGS的列,則您將無(wú)法執(zhí)行這些數(shù)學(xué)運(yùn)算0、“真”、“假”)。True
False
1
0
.cumsum()
sum
object
'True'
'False'
下面將邏輯分解為三個(gè)步驟,因此可以很容易地可視化:
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
添加回答
舉報(bào)