Использование индексирование по str
с add
:
dff['new'] = dff['CAD_ADMIN'].str[:5].add('qv').add(dff['CAD_ADMIN'].str[5:]).add(dff['rank'])
print (df)
CAD_ADMIN rank new
0 0507502 001 05075qv02001
1 0507503 002 05075qv03002
2 0507504 003 05075qv04003
3 0507505 004 05075qv05004
Если столбец ранга не требуется в выводе df
:
rank = (dff.groupby('CAD_ADMIN').cumcount()+1).astype(str).str.zfill(3)
dff['new'] = dff['CAD_ADMIN'].str[:5].add('qv').add(dff['CAD_ADMIN'].str[5:]).add(rank)
print (dff)
CAD_ADMIN new
0 0507502 05075qv02001
1 0507503 05075qv03001
2 0507504 05075qv04001
3 0507505 05075qv05001
Решение с format
и списком:
:
rank = (dff.groupby('CAD_ADMIN').cumcount()+1).astype(str).str.zfill(3)
dff['new'] = ['{}qv{}'.format(x[:5], x[5:]) for x in dff['CAD_ADMIN']] + rank
#python 3.6 solution
#dff['new'] = [f'{x[:5]}qv{x[5:]}' for x in dff['CAD_ADMIN']] + rank
print (dff)
CAD_ADMIN new
0 0507502 05075qv02001
1 0507503 05075qv03001
2 0507504 05075qv04001
3 0507505 05075qv05001
Решение, если нужен столбец rank
в выводе DataFrame
:
dff['rank'] = (dff.groupby('CAD_ADMIN').cumcount()+1).astype(str).str.zfill(3)
dff['new'] = ['{}qv{}'.format(x[:5], x[5:]) for x in dff['CAD_ADMIN']] + dff['rank']
print (dff)
CAD_ADMIN rank new
0 0507502 001 05075qv02001
1 0507503 001 05075qv03001
2 0507504 001 05075qv04001
3 0507505 001 05075qv05001