基于python中的其他列生成自定义ID
我有一只熊猫,看起来像这样基于python中的其他列生成自定义ID,python,string,pandas,dataframe,Python,String,Pandas,Dataframe,我有一只熊猫,看起来像这样 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 CIC
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”
如果有人能帮我,我将不胜感激。
提前谢谢 此答案假设DOB是日期时间:
这里有一种使用方法的方法: 使用.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'
应该更快,因为它是矢量化的?@MisterMonk,不,str方法不是矢量化的。只使用内置str方法+f字符串的列表理解可能更快。很高兴知道
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
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
year = df.DOB.str.split('-').str[0]
padded_uid = df.UID.astype(str).str.pad(7, 'left', '0')
df['TID'] = year + '-' + padded_uid + '-P'