Соответствующий элемент списка с элементом данных dataframe python - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть несколько списков, таких как:

l1 = ['Category=worker,manager','Name=Ana,Tom', 'Task=Cleaning,Plumbing']

А затем у меня есть датафрейм df:

Name    | Category        | Task       | OrderNum

Bryan   | worker,manager  | Cleaning,Plumbing | 2
Ana,Tom | worker,manager  | Cleaning,Plumbing | 3

Я хочу найти, что для элемента списка найти соответствующее значение всоответствующий столбец df, и когда все совпадения найдены для списка, затем вернуть его значение из столбца OrderNum.

Как я могу получить это?

1 Ответ

0 голосов
/ 05 декабря 2018

Учитывая:

>>> l1 = ['Category=worker,manager','Name=Ana,Tom', 'Task=Cleaning,Plumbing']
>>> 
>>> df
      Name        Category               Task  OrderNum
0    Bryan  worker,manager  Cleaning,Plumbing         2
1  Ana,Tom  worker,manager  Cleaning,Plumbing         3

, вы можете сформировать запрос из l1 следующим образом:

>>> query = ' and '.join("{} == '{}'".format(*s.split('=')) for s in l1)
>>> query
"Category == 'worker,manager' and Name == 'Ana,Tom' and Task == 'Cleaning,Plumbing'"

... и затем выполнить

>>> df.query(query)
      Name        Category               Task  OrderNum
1  Ana,Tom  worker,manager  Cleaning,Plumbing         3

или

>>> df.query(query)['OrderNum']
1    3
Name: OrderNum, dtype: int64

или

>>> result, = df.query(query)['OrderNum']
>>> result
3

, если вы ожидаете ровно один удар, или

>>> result = df.query(query)['OrderNum'].iat[0]
>>> result
3

, если вы ожидаете хотя бы один удар и хотите назначить result до первого удара, независимо от того, сколько их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...