我想将一个特定的数据条目(具有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'
答案 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'])
说明