Pandas - создать новый столбец с 2 классами, где последняя строка по id - это другой класс - PullRequest
3 голосов
/ 06 марта 2020

У меня есть фрейм данных с идентификаторами в первом столбце и номером цикла во втором.

Вот пример того, как это выглядит:

df2 = pd.DataFrame(np.array([[1, 1], [1, 2], [2, 1], [2, 2], [2, 3]]),
               columns=['ID', 'cycle'])

ID    cycle    
1     1         
1     2        
2     1       
2     2
2     3

Я хочу создать новый столбец с 2 классами: «последний цикл», «не последний цикл»:

ID    cycle  group   
1     1        0 
1     2        1
2     1        0
2     2        0
2     3        1

Как решить эту задачу?

Заранее спасибо за ответы

Ответы [ 2 ]

4 голосов
/ 06 марта 2020

Давайте сделаем transform с last

df2['group']=df2.cycle.eq(df2.groupby('ID').cycle.transform('last')).astype(int)
df2
Out[244]: 
   ID  cycle  group
0   1      1      0
1   1      2      1
2   2      1      0
3   2      2      0
4   2      3      1
4 голосов
/ 06 марта 2020

Есть много способов сделать это.

Один из них - использовать groupby.tail(1).index

df2.loc[df2.groupby('ID').cycle.tail(1).index, 'group'] = 1
df2.fillna(0)

ID    cycle  group   
1     1        0 
1     2        1
2     1        0
2     2        0
2     3        1
...