Генерация группового ключа по одному идентификатору в пандах - PullRequest
0 голосов
/ 07 июня 2018

Я новичок в python, интересно, могу ли я сгенерировать ключ группы только по одному столбцу идентификатора.Например, у меня есть входной файл, такой как

inv_id  GROUP
511031  Y
204501  Y
105756  N
134092  N
591688  N
235318  Y
642085  Y
134390  Y
211797  N
456165  N
556364  Y
169807  Y
406002  N
266034  N
313153  N
42474   Y
102622  Y

Ожидаемый вывод, который я хотел получить:

inv_id  GROUP   GROUP_ID
511031  Y       001
204501  Y       001
105756  N       002
134092  N       003
591688  N       004
235318  Y       005
642085  Y       005
134390  Y       005
211797  N       006
456165  N       007
556364  Y       008
169807  Y       008
406002  N       009
266034  N       010
313153  N       011
42474   Y       012
102622  Y       012

Если столбец «GROUP» «Y» стоит в строке, поэтому он должен бытьта же самая группа и GROUP_ID должны быть записаны. Если столбец «GROUP» равен «N», генерировать продолжение id.

Я хочу получить пример кода Python, пожалуйста.

1 Ответ

0 голосов
/ 08 июня 2018

Это один из способов с использованием логической маски и pd.Series.cumsum.

mask1 = df['GROUP'] == 'N'
mask2 = (df['GROUP'] == 'Y') & (df['GROUP'].shift() == 'N')

df['GROUP_ID'] = ((mask1 | mask2).cumsum() + 1).astype(str).str.zfill(3)

print(df)

    inv_id GROUP GROUP_ID
0   511031     Y      001
1   204501     Y      001
2   105756     N      002
3   134092     N      003
4   591688     N      004
5   235318     Y      005
6   642085     Y      005
7   134390     Y      005
8   211797     N      006
9   456165     N      007
10  556364     Y      008
11  169807     Y      008
12  406002     N      009
13  266034     N      010
14  313153     N      011
15   42474     Y      012
16  102622     Y      012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...