2013-09-13 4 views
0

У меня есть объект DataFrame, с несколькими столбцами: business_id, categories, type_of_business ...Python панды dataframe нарезку, с условием, если

мне удалось создать меньший DataFrame с только business_id и categories путем индексации столбца на исходный объект DataFrame.

categories - это список определенных строк. Пример: ['Restaurant, 'food', 'bakery'] - для каждого business_id.

Одна из категорий: Restaurants. Как получить только те бизнес-идентификаторы, где слово Restaurants находится в списке категорий.

псевдокод:

for row in smaller_DataFrame: 
    if 'Restaurants' in row['categories']: 
     add this business_id to some dictionary. 

Я заинтересован в том, как я бы включить условие if в объекте DataFrame.

Заранее спасибо.

ответ

2

Вы можете сделать это с картой:

df[df.categories.map(lambda cats: 'Restaurants' in cats)] 
+0

Я использовал эту форму выражения лямбда раньше, но она полностью соскользнула с моего ума. Спасибо за вашу помощь. – anonuser0428

4

Выбор строка в соответствии с булевым условием называется маскирования в документации.

df[df['categories'].isin(['Restaurant', 'food', 'bakery'])] 

Как в стороне, я вижу, что вы были опущены. Лучше, если вы включите несколько строк образца вашего DataFrame и пример желаемого результата.

Чтобы сделать его регистром нечувствительным, придерживайтесь .str.lowercase() до .isin и создавайте список категорий в нижнем регистре.

+0

Я думаю, что его столбец 'categories' содержит списки, а не отдельные значения. –

+0

О, хорошо. Смущающий вопрос. Я оставлю это здесь на всякий случай .... –

+0

Да, что бы это ни было, у него будет ответ :) –

Смежные вопросы