У меня есть два фрейма данных. Один - это таблица поиска, состоящая из пар ключ / значение. Другой - мой основной фрейм данных. В основном фрейме данных гораздо больше записей, чем в таблице поиска. Мне нужно создать «ключ» из существующих столбцов в моем основном фрейме данных, а затем найти значение, соответствующее этому ключу, в моей таблице поиска. Вот они:
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'])
Любая помощь или указатели приветствуются.