Как я могу построить функцию для создания нового столбца на основе других столбцов, содержащих определенную строку? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть датафрейм с некоторыми клубами и их национальностью. Так же, как этот:

enter image description here

Я создал функцию, которую буду использовать для создания нового столбца на основе национальности. Я проверил, и он отлично работает, если я хочу найти значения, которые равны. Однако мне нужно было искать строки, которые содержат определенного символа. Например: если строка содержит «Br», я хочу создать новый столбец, который получит определенное значение. Если содержит другую строку, он получит другое значение.

Это то, что я сделал до сих пор (и оно работает нормально, но мне нужно что-то вроде «содержит»):

# Function 
def label_race (row):
    if row['Nationality'] == 'Brazil':
        return 'Brasil'
    else:
        return 'NA'

df.apply (lambda row: label_race(row), axis=1)

Я хотел бы сделать что-то вроде этого:

# Function 
def label_race (row):
    if row['Nationality'] contains'Br':
        return 'Brasil'
    if row['Nationality'] contains'Brl':
        return 'Brasil2'
    else:
return 'NA'

df.apply (lambda row: label_race(row), axis=1)

Я нашел несколько советов, но большинство из них используют такие вещи, как is.find () или df []. Str.contains. И я не мог приспособиться к тому, что я хочу.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

, если вы хотите создать новый столбец с двоичными значениями (если условие выполнено, то A или B), вы можете сделать что-то вроде этого

#create a column 'new' with value 'Brasil' if 'Nationality' value contains 'Bra', else put 'NA'
df['new'] = df['Nationality'].apply(lambda x: 'Brasil' if 'Bra' in x else 'NA')

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

#create a column 'new' and insert value 'ARG' whenever 'Nationality' contains 'Arg', 
df.loc[df['Nationality'].str.contains('Arg'), 'new'] = 'ARG'
#and 'BRA' whenever Nationality contains 'Brazil', without overriding any other values
df.loc[df['Nationality'].str.contains('Brazil'), 'new'] = 'BRA'
0 голосов
/ 26 июня 2019

IIUC, вы можете обойтись с str.extract и dot:

df = pd.DataFrame({'Nationality': ['Brazil', 'abBrl', 'abcd', 'BrX']})

new_df = df.Nationality.str.extract('(?P<Brazil2>Brl)|(?P<Brazil>Br)')

new_df.notnull().dot(new_df.columns)

Выход:

0     Brazil
1    Brazil2
2           
3     Brazil
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...