我有以下df:
df = pd. DataFrame({"val_a"/span>: [True,True,False, False,False,True,False, False,True,True,True, True,False,True,True]})
價值_a
0 True
1 True[/span
2 False[/span
3 False[/span
4 False[/span
5 真
6 False[/span
7 False[/span
8 真
9 真
10 True[/span
11 True[/span
12 False[/span
13 真
14 True
而我希望有如下結果:
val_a tx
0 True 0
1 True 0
2 False None
3 False None
4 False None
5 True 1
6 False None
7 False None
8 True 2
9 True 2
10 True 2
11 True 2
12 False None
13 True 3
14 True 3
解釋。當你看到一個True時--把它算作一組,所以對于索引0和1來說,它是同一個tx(0),后來只有一個True(索引5),所以把它標記為1。
我累了。我知道cumsum和groupby必須在這里起作用,但我不知道如何起作用。
g = (df['val_a']==True).cumsum()
df['tx'] = df.groupby(g).fill()
uj5u.com熱心網友回復:
用cumsum識別組,然后過濾具有True值的行,并使用factorize為每個獨特的組分配序號
m = df['val_a']
df.loc[m, 'tx'] = (~m).cumsum()[m]. factorize()[0]
另外,你也可以使用groupby ngroup
m = df['val_a']
df['tx'] = m[m].groupby((~m).cumsum() ) .ngroup()
val_a tx
0 True 0.0
1 True 0.0
2 False NaN
3 False NaN
4 False NaN
5 True 1.0
6 False NaN
7 False NaN
8 True 2.0
9 True 2.0
10 True 2.0
11 True 2.0
12 False NaN
13 True 3.0
14 True 3.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/323998.html
標籤:
