查找python中每行的第一列零值

时间:2018-05-31 07:58:45

标签: python python-3.x pandas dataframe

我有一个数据框,其中包含学生ID及其各自的阶段分数。

我想找到学生被放弃的阶段,即在哪个阶段出现了第一个零分数。然后更新相应的stage flag = 1.Below是样本数据:

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 Flag变为1.对于StuID ='XF',第一个零出现在第1阶段,因此S1标志更新为1。并且也可以用于其他行。

1 个答案:

答案 0 :(得分:1)

Stage0列,按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

然后过滤1列并按filter设置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

<强>详情:

DriveInfo