考虑 python 中的键/列顺序计算字典和数据框之间的匹配值
Count matching values between dictionary and dataframe considering keys / column order in python
我想将一个特定的数据条目(dictonary/dataframe 有 20 个变量)与一个可能相同的数据库条目相匹配。
由于没有唯一标识符,而且某些条目有很多缺失值,我想进行 "naive" 猜测。意味着我想按行计算所有匹配值并取前 10 个潜在客户。
目前,我将字典转换为列表并使用.isin()
来获取匹配值的数量。
db['no_matches'] = db.isin(list_of_criterias).sum(1)
prospects = db.nlargest(10 ['no_matches'])
但是,我的方法具有误导性,因为我计算匹配项时不考虑列 order/name。
意思是,如果我的搜索值是column1 = 'foo'
,它也与我数据库中不在 column1
中的 'foo'
值相匹配。
有没有一种方法可以按行计算匹配值并同时考虑列顺序?
谢谢。
更新:
感谢 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'
Proposed/derived 评论解决方案(针对社区维基):
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 object
- .isin() -- 传递一个 'list' 匹配任何不考虑顺序的值,而传递一个字典 does
我想将一个特定的数据条目(dictonary/dataframe 有 20 个变量)与一个可能相同的数据库条目相匹配。
由于没有唯一标识符,而且某些条目有很多缺失值,我想进行 "naive" 猜测。意味着我想按行计算所有匹配值并取前 10 个潜在客户。
目前,我将字典转换为列表并使用.isin()
来获取匹配值的数量。
db['no_matches'] = db.isin(list_of_criterias).sum(1)
prospects = db.nlargest(10 ['no_matches'])
但是,我的方法具有误导性,因为我计算匹配项时不考虑列 order/name。
意思是,如果我的搜索值是column1 = 'foo'
,它也与我数据库中不在 column1
中的 'foo'
值相匹配。
有没有一种方法可以按行计算匹配值并同时考虑列顺序?
谢谢。
更新:
感谢 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'
Proposed/derived 评论解决方案(针对社区维基):
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 object
- .isin() -- 传递一个 'list' 匹配任何不考虑顺序的值,而传递一个字典 does