У меня есть фрейм данных df
, например,
A length
0 648702831 9
1 26533315 8
2 366 3
3 354701058 9
4 25708239 8
5 70554 5
6 1574512 7
7 3975 4
Теперь я хочу создать столбец на основе таких условий, как
if ['length] == 9 or ['length] == 5:
then ['new_col'] = First 5 Characters of ['A']
else if ['length] == 8 or ['length] == 4:
then ['new_col'] = "0" & First 4 Characters of ['A']
else if ['length] == 7 or ['length] == 3:
then ['new_col'] = "00" & First 3 Characters of ['A']
else
['new_col'] = ['A']
Для вышеуказанных условийЯ создал следующую логику для проверки: (Для файла с 10000 строк это занимает много времени)
for i in df['length']:
if i == 9 or i == 5:
df['new_col'] = df['A'].astype(str).str[:5]
elif i == 8 or i == 4:
df['new_col'] = "0" + df['A'].astype(str).str[:4]
elif i == 7 or i == 3:
df['new_col'] = "00" + df['A'].astype(str).str[:3]
else:
df['new_col'] = df['A']
Я получаю следующий вывод:
A length new_col
0 648702831 9 06487
1 26533315 8 02653
2 366 3 0366
3 354701058 9 03547
4 5708239 8 05708
5 70554 5 07055
6 1574512 7 01574
7 3975 4 03975
Этоне хочу, и кажется, что он работает только для второго условия, которое добавляет «0» впереди, когда длина равна 8 или 4.
Мне нужен мой вывод, как это,
A length new_col
0 648702831 9 64870
1 26533315 8 02653
2 366 3 00366
3 354701058 9 35470
4 5708239 8 05708
5 70554 5 70554
6 1574512 7 00157
7 3975 4 03975
Как я могу добиться этого, а также если есть способ, который может занять меньше времени, это было бы здорово.Любое предложение будет оценено.