我有三个数据框:
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)
这引发了一个错误,说它无法识别我的列名。我究竟做错了什么?还有写这个更好的方法吗?
答案 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)