Python векторизация таблицы поиска фрейма данных - PullRequest
1 голос
/ 06 мая 2020

У меня есть два фрейма данных. Один - это таблица поиска, состоящая из пар ключ / значение. Другой - мой основной фрейм данных. В основном фрейме данных гораздо больше записей, чем в таблице поиска. Мне нужно создать «ключ» из существующих столбцов в моем основном фрейме данных, а затем найти значение, соответствующее этому ключу, в моей таблице поиска. Вот они:

lk = pd.DataFrame( { 'key': ['key10', 'key9'],'value': [100, 90]})
lk.set_index('key', inplace=True)

date_today = datetime.now()

df = pd.DataFrame({ 'date1':[date_today, date_today,date_today],
                 'year':[1999,2001,2003], 
                'month':[10,9,10],
                'code':[10,4,5],
                'date2':[None, date_today, None],
                'keyed_value': [0,0,0]})

Вот как я получаю значение: df ['built'] = "key" + df ['month']. Astype ('str')

def getKeyValue(lk, k):
    return lk.loc[k, 'value']

print(getKeyValue(lk, df['constructed']))

Вот мои проблемы: 1) Я не хочу использовать итерацию или применять методы. Мои фактические данные составляют более 2 миллионов строк и 200 столбцов. Это было очень медленно (более 2 минут) с применением. Поэтому я выбрал внутреннее соединение и, следовательно, необходимость создания нового «сконструированного» столбца. После соединения я отбрасываю «сконструированный» столбец. Объединение помогло, снизив время выполнения до 48 секунд. Но должен быть более быстрый способ (я надеюсь).

2) Как мне векторизовать это? Я даже не знаю, как к этому подойти. Это вообще возможно? Я пробовал это, но только что получил ошибку: df ['keyed_values'] = getKeyValue (lk, df ['built'])

Любая помощь или указатели приветствуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...