2017-02-02 3 views
0

Очень понравилась бы помощь по следующей проблеме. Я намерен использовать библиотеку Pandas для решения этой проблемы, поэтому было бы полезно, если бы вы могли объяснить, как это можно сделать, используя Pandas, если это возможно.Репликация VLOOKUP Excel в Python Pandas

Я хочу взять следующий первенствовать файл:

Before

и:

  • 1) преобразовать 'перед' файла в кадр панды данных
  • 2) ищет текст в столбце «Сайт». Если этот текст появляется внутри строки в столбце «Домен», верните значение в колонке «Владелец» в разделе «Выход».
  • 3) результат должен выглядеть как файл «После». Я хотел бы преобразовать это обратно в формат CSV.

After

Так, по существу, это похоже на первенствовать ВПР упражнения, за исключением его не точное совпадение мы ищем между «сайта» и в столбце «Domain».

Я уже делал это в Excel, но я смотрел более 100 000 строк и сравнивал их с более чем 1000 сайтами, что приводит к сбоям.

Я попытался сохранить список поиска в том же файле, что и список доменов, которые мы хотим классифицировать с помощью «Владелец». Если есть намного лучший способ сделать это, например, хранить список поиска в отдельном фрейме данных, то это нормально.

Заранее благодарим за любую помощь, я действительно ценю это.

Colin

+1

Возможный дубликат: http://stackoverflow.com/questions/38291908/excel-vlookup-equivalent-in-pandas –

+1

Возможный дубликат [vlookup in Pandas using join] (http://stackoverflow.com/questions/25493625/vlookup-in-pandas-using-join) – Boud

ответ

0

Я думаю, что вопрос в OP несколько отличается от решений, связанных в комментариях, которые либо имеет дело с точными поисками (map) или поисками между dataframes. Здесь есть один фрейм данных и частичное совпадение.

import pandas as pd 
import numpy as np 

df = pd.ExcelFile('data.xlsx').parse(0) 
df = df.astype(str) 
df['Test'] = df.apply(lambda x: x['Site'] in x['Domain'],axis=1) 
df['Output'] = np.where(df['Test']==True, df['Owner'], '') 
df 

lambda позволяет повторение теста in должны применяться по оси, чтобы возвращать логическое значение в Test. Это действует как правило для поиска Owner и размещения в Output.

+0

спасибо joshi123. Я пробовал выше, и столбец «Выход» не заполняется в моем большем наборе данных. Я мог ошибаться, но я думаю, что вышеизложенное рассматривает только одну строку за раз, ища строку «Site» в столбце «Домен» (в той же строке), и если TRUE, она возвращает строку в столбце «Владелец». Однако то, что я хочу сделать, это посмотреть строку «domain» в первой строке, затем отсканировать ВСЕ строки в столбце «Сайт» и искать частичное совпадение. Можете ли вы изменить это выше, чтобы достичь этого? Спасибо –

+0

Я должен добавить, что в моем фиктивном отрывке данных я, возможно, упростил проблему, получив «сайт», который частично соответствует «домену», появляющемуся в той же строке. –