Генерация пользовательского идентификатора на основе других столбцов в Python - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть pandas df, который выглядит следующим образом

   UID    DOB        BEDNUM     
    0   1900-01-01    CICU1   
    1   1927-05-21    CICU1 
    2   1929-10-03    CICU1 
    3   1933-06-29    CICU1 
    4   1936-01-09    CICU1 
    5   1947-11-14    CICU1   
    6   1900-01-01    CICU1   
    7   1927-05-21    CICU1 
    8   1929-10-03    CICU1 
    9   1933-06-29    CICU1 
   10   1936-01-09    CICU1 
   11   1947-11-14    CICU1   

Теперь я хотел бы добавить новый TID столбца к этому фрейму данных, который должен быть в формате 'YYYY-0000000-P'

    UID    DOB        BEDNUM    TID 
    0   1900-01-01    CICU1   1900-0000000-P
    1   1927-05-21    CICU1   1927-0000001-P
    2   1929-10-03    CICU1   1929-0000002-P
    3   1933-06-29    CICU1   1933-0000003-P
    4   1936-01-09    CICU1   1936-0000004-P
    5   1947-11-14    CICU1   1947-0000005-P
    6   1900-01-01    CICU1   1900-0000006-P
    7   1927-05-21    CICU1   1927-0000007-P
    8   1929-10-03    CICU1   1929-0000008-P
    9   1933-06-29    CICU1   1933-0000009-P
   10   1936-01-09    CICU1   1936-0000010-P
   11   1947-11-14    CICU1   1947-0000011-P

У меня 24000 записей в таблице, и TID последней записи должен выглядеть как «YYYY-0024000-P».

Буду очень признателен, если кто-нибудь сможет мне помочь с этим.Заранее спасибо !!

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Вот один из способов использования панд str методов:

df['DOB'] = pd.to_datetime(df['DOB'])  # convert DOB to datetime if necessary

df['TID'] = df['DOB'].dt.year.astype(str) + '-' + df['UID'].astype(str).str.zfill(7) + '-P'

print(df)

    UID        DOB BEDNUM  Year             TID
0     0 1900-01-01  CICU1  1900  1900-0000000-P
1     1 1927-05-21  CICU1  1927  1927-0000001-P
2     2 1929-10-03  CICU1  1929  1929-0000002-P
3     3 1933-06-29  CICU1  1933  1933-0000003-P
4     4 1936-01-09  CICU1  1936  1936-0000004-P
5     5 1947-11-14  CICU1  1947  1947-0000005-P
6     6 1900-01-01  CICU1  1900  1900-0000006-P
7     7 1927-05-21  CICU1  1927  1927-0000007-P
8     8 1929-10-03  CICU1  1929  1929-0000008-P
9     9 1933-06-29  CICU1  1933  1933-0000009-P
10   10 1936-01-09  CICU1  1936  1936-0000010-P
11   11 1947-11-14  CICU1  1947  1947-0000011-P
0 голосов
/ 27 ноября 2018

Другой способ, используя .str accessor:

year = df.DOB.str.split('-').str[0]
padded_uid = df.UID.astype(str).str.pad(7, 'left', '0')
df['TID'] = year + '-' + padded_uid + '-P'
0 голосов
/ 27 ноября 2018

В этом ответе предполагается, что DOB равно datetime:

year = df.DOB.dt.year
nums = df.UID.astype(str).str.zfill(7)
df.assign(TID=[f'{y}-{num}-P' for y, num in zip(year, nums)])

    UID        DOB BEDNUM             TID
0     0 1900-01-01  CICU1  1900-0000000-P
1     1 1927-05-21  CICU1  1927-0000001-P
2     2 1929-10-03  CICU1  1929-0000002-P
3     3 1933-06-29  CICU1  1933-0000003-P
4     4 1936-01-09  CICU1  1936-0000004-P
5     5 1947-11-14  CICU1  1947-0000005-P
6     6 1900-01-01  CICU1  1900-0000006-P
7     7 1927-05-21  CICU1  1927-0000007-P
8     8 1929-10-03  CICU1  1929-0000008-P
9     9 1933-06-29  CICU1  1933-0000009-P
10   10 1936-01-09  CICU1  1936-0000010-P
11   11 1947-11-14  CICU1  1947-0000011-P
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...