考虑python中的键/列顺序来计算字典和数据框之间的匹配值

时间:2019-10-30 13:37:54

标签: python pandas dataframe match similarity

我想将一个特定的数据条目(具有20个变量的字典/数据框)与一个可能的数据库条目进行匹配。

由于没有唯一的标识符,对于某些条目,很多缺失值我想做出一个“天真”的猜测。意味着我想逐行计算所有匹配值,并选择前10个潜在客户。

当前,我将字典转换为列表,并使用.isin()获取匹配值的数量。

db['no_matches'] = db.isin(list_of_criterias).sum(1)
prospects = db.nlargest(10 ['no_matches'])

但是,我的方法具有误导性,因为无论列顺序/名称如何,我都会计算匹配项。

表示,如果我的搜索值是column1 = 'foo',它也与数据库中'foo'以外的column1值匹配。

是否有一种方法可以按行计算匹配值并同时考虑列顺序?

谢谢。

更新:

感谢Quang Hoang的评论,我将相应的字典传递给了.isin()函数。但是,我收到了type error

In[9]: type(clean_criteria)
Out[9]: dict

db.isin(clean_criteria) #Throws Error

TypeError: only list-like or dict-like objects are allowed to be passed to DataFrame.isin(), you passed a 'str'

1 个答案:

答案 0 :(得分:0)

通过评论提出的/派生的解决方案(对于社区Wiki):

dict_criteria = df_criteria.to_dict('list') 

db['no_matches'] = db.isin(dict_criteria).sum(1)  
prospects = db.nlargest(10 ['no_matches'])

说明

  • .to_dict('list')-'list'参数将dict值从skalar转换为list / array对象
  • .isin()-传递“列表”与传递字典时不考虑顺序的任何值匹配