Эквивалент панд в конкатенации Excel для значений столбцов - Python 3 - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть фреймы данных pandas df, например,

    A           length
0   648702831   9
1    26533315   8
2   366073121   9
3   354701058   9
4    05708239   8
5   705542215   9
6     1574512   7
7   397015500   9

Теперь мне нужно проверить столбец length и создать новый столбец на основе условий.Если length = 9, мне нужны первые пять из A, если length = 8, мне нужно «0» и первые четыре символа A, и так далее.Для length 8 мне нужно добавить «0» впереди.

Например,

for i in df['length']:
    if i == 9:
       df['new_column'] = df['A'].astype(str).str[0:5]  # to take 5 characters for a df with 10000 rows takes a lot of time
    elif i == 8:
       df['new_column'] = "0" & df['A'].astype(str).str[0:4] ## Need help here

Мой желаемый результат:

            A       length      new_column
    0   648702831   9           64870
    1    26533315   8           02653
    2   366073121   9           36607
    3   354701058   9           35470
    4    05708239   8           00570
    5   705542215   9           70554
    6     1574512   7           00157
    7   397015500   9           39701  

ВExcel power-query,

это делается примерно так:

if Text.Length([length]) = 8
   then "0" & Text.Start([length],4)

Как я могу сделать это в Python 3?

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Использование pad от доступа str:

df['A'].astype(str).str.pad(5, side='left', fillchar='0').str[:5]

0    64870
1    02653
2    36607
3    35470
4    00570
5    70554
6    00157
7    39701
0 голосов
/ 18 декабря 2018

IIUC с использованием zfill с фрагментом строки

[x[:5-9+y].zfill(5) for x,y in zip(df.A.astype(str),df.length)]
Out[356]: ['64870', '02653', '36607', '35470', '05708', '70554', '00157', '39701']
...