[英]Finding the the first column with zero value for each row in python
我有一個具有學生ID及其各自階段分數的數據框。
我想找到學生輟學的階段,即哪個零分出現在哪個階段。 然后更新相應的stage flag =1。下面是示例數據:
StuID | Stage1 | Stage2 | Stage3 | Stage4 | S1Flag |S2Flag |S3Flag | S4Flag
Ak | 80.1 | 23.3 | 0 | 0 | 0 | 0 | 1 | 0
XF | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0
WE | 23 | 34 | 43 | 34 | 0 | 0 | 0 | 0
對於上述數據,對於StuID ='AK',第一個零出現在階段3中,因此S3標志更改為1,對於StuID ='XF',第一個零出現在階段1中,因此S1標志更新為1。 並且對其他行也執行o。
僅Stage
一個filter
Stage
列,用0
比較,獲取累積和,所以如果用1
比較,則獲取前0
掩碼:
m = df.filter(like='Stage').eq(0).cumsum(axis=1).eq(1)
print (m)
Stage1 Stage2 Stage3 Stage4
0 False False True False
1 True False False False
2 False False False False
然后過濾Flag
列並通過mask
設置1
:
cols = df.filter(like='Flag').columns
df[cols] = df[cols].mask(m.values, 1)
print (df)
StuID Stage1 Stage2 Stage3 Stage4 S1Flag S2Flag S3Flag S4Flag
0 Ak 80.1 23.3 0 0 0 0 1 0
1 XF 0.0 0.0 0 0 1 0 0 0
2 WE 23.0 34.0 43 34 0 0 0 0
詳細資料 :
print (df.filter(like='Stage'))
Stage1 Stage2 Stage3 Stage4
0 80.1 23.3 0 0
1 0.0 0.0 0 0
2 23.0 34.0 43 34
print (df.filter(like='Stage').eq(0))
Stage1 Stage2 Stage3 Stage4
0 False False True True
1 True True True True
2 False False False False
print (df.filter(like='Stage').eq(0).cumsum(1))
Stage1 Stage2 Stage3 Stage4
0 0 0 1 2
1 1 2 3 4
2 0 0 0 0
print (df.filter(like='Stage').eq(0).cumsum(1).eq(1))
Stage1 Stage2 Stage3 Stage4
0 False False True False
1 True False False False
2 False False False False
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.