我有一个看起来像这样的熊猫dp
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'。
如果有人可以帮助我,我将非常感谢。 在此先感谢!
答案 0 :(得分:2)
此答案假设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
答案 1 :(得分:2)
这是使用熊猫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
答案 2 :(得分:0)
使用.str
访问器的另一种方法:
year = df.DOB.str.split('-').str[0]
padded_uid = df.UID.astype(str).str.pad(7, 'left', '0')
df['TID'] = year + '-' + padded_uid + '-P'