цикл по столбцу данных в столбце python - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть три кадра данных:

df1, df2, df3.

Каждый из этих фреймов данных имеет переменную (column1, column2, column3, соответственно) с идентификатором.

У меня есть основной кадр данных, называемый master_df, с column_master. Этот столбец также имеет идентификатор.

Я хотел бы написать цикл так, чтобы, если column_master имел любой из идентификаторов из df1, df2 или df3, создал новый столбец с именем 'flag' и пометил его: flag1, если идентификатор был найден в df1, flag2, если найдено в df2, flag3, если найдено в df3.

Я пытался сделать это до сих пор, но не знаю, как закончить код:

def create_flag(df):

if df['column_master'] in df1['column1']:
    return df['flag']==flag_1  
elif df['column_master'] in ('column2'):
    return df['flag']==flag_2   
elif df['column_master'] in ('column3'):
    return df['flag']==flag_3 

    return df 

create_flag(master_df)

Это выдает ошибку, говорящую, что он не распознает имена моих столбцов. Что я делаю неправильно? и есть ли лучший способ написать это?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

В вашем коде я вижу, что для условия else у вас отсутствуют имена фреймов данных

def create_flag(df):

if df['column_master'] in df1['column1']:
    return df['flag']==flag_1  
elif df['column_master'] in df2['column2']:
    return df['flag']==flag_2   
elif df['column_master'] in df3['column3']:
    return df['flag']==flag_3 

    return df 

create_flag(master_df)
0 голосов
/ 04 ноября 2018

Избегайте построчных расчетов с пандами. Вы можете использовать np.select с несколькими условиями / значениями.

dfs = {1: df1, 2: df2, 3: df3}

conds = [df['column_master'].isin(dfx[f'column{idx}']) for idx, dfx in dfs.items()]
choices = [f'flag{i}' for i in range(1, len(conds)+1)]

df['flag'] = np.select(conds, choices, default='flag-None')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...