Использование функции VLookup для фрейма данных - PullRequest
0 голосов
/ 27 мая 2020

У меня есть два фрейма данных l3 , который содержит 559 строк, а кадр другого дня 'mains' содержит 58 строк, и теперь я хочу создать столбец 'new' в l3, например что если значение в столбце l3 'dum' присутствует в любой из строк столбца 'Datecomb' в основном фрейме данных, тогда новый столбец должен содержать True else False

Я пробовал:

def f(i):
    if((i == (mains['Datecomb']).any()) == True):
        return 'True'
    else:
        return 'False'

 l3['new']=l3['dum'].apply(f)

Но эта функция вернула только «False». Я использовал счетчики значений как для l3 ['dum'], так и для mnains ['Datecomb'], и я мог видеть общие значения, используя опцию Ctrl + F на chrome ...

1 Ответ

1 голос
/ 27 мая 2020

Для вашего конкретного c запроса мы можем сделать это в одной строке с некоторой цепочкой методов и пониманием списка:

I3['new'] = [mains['Datecomb'].where(mains['Datecomb'] == i).count() > 0 for i in I3['dum'].values]

Это выражение использует понимание списка для подсчета количества записей в mains ['Datecomb'] для каждого значения в I3 ['dum'] , возвращает True , если этот счетчик> 0, и устанавливает результирующий список как столбец I3 ['new'] .

Если вы не знакомы с пониманием списков, посмотрите в Интернете несколько примеров. Это мощный инструмент!

В качестве альтернативы вы можете использовать метод DataFrame.join () , чтобы объединить результаты операции value_counts ()> 0 на mains :

I3 = I3.join(mains['Datecomb'].value_counts() > 0, on = 'dum').fillna(False)
I3 = I3.rename(columns={'Datecomb': 'new'})

Для более общих операций поиска, вероятно, лучше использовать методы join (), merge () или concat (). Я только что обнаружил, что первый метод выше хорошо работает для вашей спецификации c запрос

Я протестировал это на следующем наборе данных, и оба метода работали

I3 = pd.DataFrame([
     ['dum1', 'old1'],
     ['dum2', 'old2'],
     ['dum3', 'old3'],
     ['dum4', 'old4']],
     columns = ['dum', 'old'] )
mains = pd.DataFrame([
     ['dum2', 'not_used2'],
     ['dum3', 'not_used3'],
     ['dum3', 'not_used4']],
     columns = ['Datecomb', 'NotUsed'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...