Назначьте значение 1 до того, как другая переменная станет равной 1, только в первый раз - PullRequest
0 голосов
/ 22 марта 2020

У меня есть этот фрейм данных:

ID  X1  X2  Y
 A  11  47  0
 A  11  87  0
 A  56  33  0
 A  92  72  1
 A  83  34  0
 A  34  31  0
 B  88  62  1
 B  28  71  0
 B  95  28  0
 B  92  87  1
 B  91  45  0
 C  46  59  0
 C  60  68  1
 C  67  78  0
 C  26  26  0
 C  13  77  0
 D  40  95  0
 D  25  26  1
 D  93  31  0
 D  71  67  0
 D  91  24  1
 D  80  19  0
 D  44  49  0
 D  41  84  1
 E  38  10  0
 F  23  75  1
 G  46  58  1
 G  44  52  0

Я хочу присвоить значение 1 до того, как Y будет равно 1, только в первый раз . В противном случае 0.

«В противном случае» означает, что Y уже (или есть) равен 1.

  • Примечание: его следует применять для каждого ID отдельно.

Ожидаемый результат:

ID  X1  X2  Y  before
 A  11  47  0       1
 A  11  87  0       1
 A  56  33  0       1
 A  92  72  1       0
 A  83  34  0       0
 A  34  31  0       0
 B  88  62  1       0
 B  28  71  0       0
 B  95  28  0       0
 B  92  87  1       0
 B  91  45  0       0
 C  46  59  0       1
 C  60  68  1       0
 C  67  78  0       0
 C  26  26  0       0
 C  13  77  0       0
 D  40  95  0       1
 D  25  26  1       0
 D  93  31  0       0
 D  71  67  0       0
 D  91  24  1       0
 D  80  19  0       0
 D  44  49  0       0
 D  41  84  1       0
 E  38  10  0       1
 F  23  75  1       0
 G  46  58  1       0
 G  44  52  0       0

1 Ответ

5 голосов
/ 22 марта 2020

IIU C

df['New']=df.groupby('ID').Y.cumsum().eq(0).astype(int)
df
   ID  X1  X2  Y  New
0   A  11  47  0    1
1   A  11  87  0    1
2   A  56  33  0    1
3   A  92  72  1    0
4   A  83  34  0    0
5   A  34  31  0    0
6   B  88  62  1    0
7   B  28  71  0    0
8   B  95  28  0    0
9   B  92  87  1    0
10  B  91  45  0    0
11  C  46  59  0    1
12  C  60  68  1    0
13  C  67  78  0    0
14  C  26  26  0    0
15  C  13  77  0    0
16  D  40  95  0    1
17  D  25  26  1    0
18  D  93  31  0    0
19  D  71  67  0    0
20  D  91  24  1    0
21  D  80  19  0    0
22  D  44  49  0    0
23  D  41  84  1    0
24  E  38  10  0    1
25  F  23  75  1    0
26  G  46  58  1    0
27  G  44  52  0    0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...