Подсчитать совпадающие значения между словарем и фреймом данных, учитывая порядок ключей / столбцов в python - PullRequest
0 голосов
/ 30 октября 2019

Я хочу сопоставить конкретную запись данных (диктонария / фрейм данных с 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 голосов
/ 30 октября 2019

Предлагаемое / производное решение по комментариям (для вики сообщества):

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 в объект списка / массива
  • .isin () - передача «списка» соответствует любому значению без учета порядка, в то время как передача словаря делает
...