首页 > 解决方案 > 根据python中的其他列生成自定义ID

问题描述

我有一个看起来像这样的熊猫 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”。

如果有人可以帮助我,我将不胜感激。提前致谢!!

标签: pythonstringpandasdataframe

解决方案


这个答案假设DOBdatetime

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

推荐阅读