оператор, основанный на том, начинается ли строковое поле с номера - PullRequest
0 голосов
/ 18 октября 2018

У меня есть датафрейм pandas с двумя столбцами адресов улиц.Я хотел бы проверить значение в каждом столбце, чтобы увидеть, если он начинается с числа.Затем я хочу создать третий столбец, который возвращает значение поля, которое начинается с числа.

Рассмотрим следующее df:

df = pd.DataFrame({"A":["123 Fake St","456 Fake St","Crown Building","Other Building"], 
                   "B":["Dorm","12 Dorm","34 Dorm","Other Dorm"]})

Если оба поля или ни одно из полей не начинаются с цифры, то должно возвращаться столбец A. Таким образом, третий столбец будет:

123 Fake St
456 Fake St
34 Dorm
Other Building

Я пытался использовать np.where:

df['C'] = np.where(df['A'][0].isdigit(), df['A'], df['B'])

Я полагаю, что это не учитывает возврат 'A', если ни один из них не начинается с числа.Кажется, что .isdigit часть утверждения не сработала.

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 18 октября 2018

Вам нужно использовать метод .str, чтобы разрезать каждое значение ячейки как строку, а не разрезать столбец целиком.

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

Вот пример:

a_is_digit = df.A.str[0].str.isdigit()
neither_is_digit = ~df.A.str[0].str.isdigit() & ~df.B.str[0].str.isdigit()
mask = a_is_digit | neither_is_digit
df['C'] = np.where(mask, df.A, df.B)

С результатом:

                A           B               C
0     123 Fake St        Dorm     123 Fake St
1     456 Fake St     12 Dorm     456 Fake St
2  Crown Building     34 Dorm         34 Dorm
3  Other Building  Other Dorm  Other Building
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...