Python Dataframe - создает новый столбец со значением, основанным на длине существующего значения столбца - PullRequest
0 голосов
/ 15 мая 2019

У меня есть датафрейм следующим образом.

d = {'ID' : ['123456789012345678', '3456789012345678']
    }
df = pd.DataFrame(d)

с выводом как

    ID
0   123456789012345678
1   3456789012345678

Я хотел бы создать новый столбец is_valid такой, что если длина ID value is 18 затем true else false то есть ожидаемый результат равен

            ID          is_valid
0   123456789012345678  Yes
1   3456789012345678    No

Теперь я использую регулярное выражение следующим образом

expr = '^[0-9]{18}$'
df['is_valid'] = np.where(df['ID'].str.match(expr), 'Yes', 'No')

Есть ли что-нибудь лучше?способ достичь этого?

Ответы [ 3 ]

2 голосов
/ 15 мая 2019

Ваш код:

 %timeit -n 1000
 expr = '^[0-9]{18}$'
 %timeit df['is_valid'] = np.where(df['ID'].str.match(expr), 'Yes', 'No')

#320 µs ± 7.97 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

Другая альтернатива:

%timeit -n 5000
%timeit df['validation']=['True' if len(s)>=18 else 'False' for s in df['ID']]

#201 µs ± 10.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

enter image description here

2 голосов
/ 15 мая 2019

Использование Series.str.len и Series.eq:

df['is_valid'] = df.ID.str.len().eq(18)

[вне]

                   ID  is_valid
0  123456789012345678      True
1    3456789012345678     False
1 голос
/ 15 мая 2019

Вы можете использовать np.where для переключения между Yes и No в зависимости от условия:

df['is_valid'] = np.where(df.ID.str.len().eq(18), 'Yes', 'No')
#                   ID is_valid
#0  123456789012345678      Yes
#1    3456789012345678       No
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...