循环遍历dataframe列python

时间:2018-11-04 12:25:59

标签: python arrays pandas loops if-statement

我有三个数据框:

df1,df2,df3。

每个数据帧都有一个变量(分别为column1,column2,column3),该变量具有ID。

我有一个主数据帧,称为master_df,带有column_master。此列也带有一个ID。

我想编写一个循环,以便如果column_master具有df1,df2或df3中的任何ID,则创建一个名为'flag'的新列并对其进行标记:如果在df1中找到了ID,则标记flag1;如果在df2中找到,在df3中找到flag3。

到目前为止,我一直尝试这样做,但是我对如何完成代码一无所知:

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 :(得分:2)

避免使用Pandas进行按行计算。您可以将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')

答案 1 :(得分:0)

在您的代码中,我可以看到其他情况下您缺少数据框名称

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)