Перенести числа из других столбцов по позициям в новый столбец в Python? - PullRequest
0 голосов
/ 03 июля 2018

Мне понадобятся эти столбцы: CAD_ADMIN,rank

CAD_ADMIN rank
0507502   001
0507503   002
0507504   003
0507505   004

Я сделал столбец rank следующим образом:

dff['rank']= (dff.groupby('CAD_ADMIN').cumcount()+1).astype(str).str.zfill(3)

Дело в том, что мне нужно сделать новый столбец, который будет иметь:

Первые 5 цифр из CAD_ADMIN, затем буквы 'qw', а затем остальные CAD_ADMIN (6 и 7 цифр в позиции и затем столбец rank например:

new_col
05075qw02001   #first line
etc..

Я попробовал некоторые лямбда-функции, но это было далеко от желаемого результата.

1 Ответ

0 голосов
/ 03 июля 2018

Использование индексирование по 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...