Панды — Как искать значение, когда фрейм данных содержит списки?

#python #pandas #dataframe

Вопрос:

Я пытаюсь найти значение в фрейме данных списков. Например, если я ищу собаку, она говорит мне, что это животное. Если я буду искать Холдена, он скажет мне, что это машина. Мой фрейм данных выглядит так:

      type                                  group
0  animal                       [cat, dog, bird]
1     car  [chevy, ford, nissan, holden, bently]
 

Мой код состоит в том, чтобы определить, к какому типу относится собака:

 import pandas as pd

data = {
  "type": ['animal', 'car'],
  "group": [['cat', 'dog', 'bird'], ['chevy', 'ford', 'nissan', 'holden', 'bently']]
}

df = pd.DataFrame(data)

find = ['dog']

df = df[pd.DataFrame(df['group'].tolist()).isin(find).any(1).values]
print('You detected: ', df['type'])
 

Я получаю этот вывод:

 You detected:  0    animal
Name: type, dtype: object
 

Но я пытаюсь получить этот вывод только с помощью типа

Вы обнаружили: животное

Если я изменю find = ['holden'] Его, Он вернется:

 You detected:  1    car
Name: type, dtype: object
 

Я хочу такого результата You detected: car

Является ли это лучшим и самым простым способом поиска одного значения в моем фрейме данных?

Ответ №1:

Вам .item() loc также нужно с колонкой:

 val = df.loc[pd.DataFrame(df['group'].tolist()).isin(find).any(1), 'type'].item()
print('You detected:', val)
 

Выход:

 You detected: animal