#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