Полный нуб здесь, поэтому любая помощь будет очень признательна. Мне нужно создать функцию, которая будет применяться к серии pandas (zipcode) в DataFrame на основе условного значения в другой серии (стране) из того же DataFrame.
Функция, которую я создал
## function for retrieving only numeric characters
num_pattern = '(\d+)'
def numeric(x,y):
try :
a = re.search(x,y).group()
except:
a = None
return a
df['zip'] = df['zip'].apply(lambda x: numeric(num_pattern,x))
Мне нужно, чтобы эта функция передавалась только в том случае, если значения в моем столбце df['country']
равны 'US'
это должно сделать это: df['zip'] = df.apply(lambda x: numeric(x.col_1), axis=1)
@JuanC, не могли бы вы поделиться примером?
Было бы полезно, если бы вы могли отредактировать свой пост, включив в него пример, как показано здесь: stackoverflow.com/help/минимально-воспроизводимый-пример Например, покажите нам образец DataFrame «до» с 3 или 4 строками и 2 или 3 столбцами с помощью df = pd.DataFrame({....
Затем сделайте это снова, создав вручную результат, который вы хотите. (Но также прочитайте связанную статью и примените ее к своему вопросу.) Спасибо!
Вы можете подать заявку на свои строки df:
df['zip'] = df.apply(lambda x: numeric(num_pattern,x['zip']) if x['country']=='US' else x['zip'], axis=1)
Спасибо, но я получаю это сообщение об ошибке IndexError: ('страна', 'произошло по электронной почте индекса')
Даже с параметром axis=1?
ничего себе я идиот, это помогло бы, если бы я прокрутил. Огромное спасибо!
Вам действительно нужно, чтобы условие было внутри функции? В противном случае вы можете использовать
.loc
, чтобы ваша функция применялась только к «США».