以字典形式检查数据帧值(作为键,值元组)的矢量化方法?

Exc*_*elp 4 python dictionary boolean dataframe pandas

我想在我的数据框中创建一个列,检查一列中的值是否是包含字典键的另一列的字典值,如下所示:

In [3]:
df = pd.DataFrame({'Model': ['Corolla', 'Civic', 'Accord', 'F-150'],
                   'Make': ['Toyota', 'Honda', 'Toyota', 'Ford']})
dic = {'Prius':'Toyota', 'Corolla':'Toyota', 'Civic':'Honda', 
       'Accord':'Honda', 'Odyssey':'Honda', 'F-150':'Ford', 
       'F-250':'Ford', 'F-350':'Ford'}
df

Out [3]:
     Model    Make
0  Corolla  Toyota
1    Civic   Honda
2   Accord  Toyota
3    F-150    Ford
Run Code Online (Sandbox Code Playgroud)

在应用函数或其他任何函数后,我希望看到:

Out [10]:
     Model    Make   match
0  Corolla  Toyota    TRUE
1    Civic   Honda    TRUE
2   Accord  Toyota   FALSE
3    F-150    Ford    TRUE
Run Code Online (Sandbox Code Playgroud)

提前致谢!

编辑:我尝试创建一个传递元组的函数,这将是两列,但我不认为我正确传递参数:

def is_match(make, model):
  try:
    has_item = dic[make] == model
  except KeyError:
    has_item = False
  return(has_item)

df[['Model', 'Make']].apply(is_match)

results in:
TypeError: ("is_match() missing 1 required positional 
argument: 'model'", 'occurred at index Model')
Run Code Online (Sandbox Code Playgroud)

WeN*_*Ben 5

你可以用 map

df.assign(match=df.Model.map(dic).eq(df.Make))
Out[129]: 
     Make    Model  match
0  Toyota  Corolla   True
1   Honda    Civic   True
2  Toyota   Accord  False
3    Ford    F-150   True
Run Code Online (Sandbox Code Playgroud)