Panda funzione equivalente a hlookup in excel

0

Domanda

C'è questa df "creditor_life_rates_tranpose"che è una tabella di ricerca:

enter image description here

Sto provando a cercare il valore in base alle chiavi "age"e "term_years"e archivio i miei dati di base telaio "applicazione".

Per i dati di prova, la base dataframe "application"contiene le colonne "age", "term_years"con i valori di 49 e 3.8 rispettosamente.

Base dataframe applicazione è qui sotto:

age, terms_years
49, 3.8

Vediamo che ha 49 anni, è situato nella tabella di ricerca, ma dal 3.8 non si trova in term_years colonna della tabella di ricerca ho bisogno di cercare di utilizzare il più alto valore che è inferiore a 3.8. In questo caso sarebbe 3.5. Quindi il valore che deve essere restituito è 21.40.

Avevo provato a scrivere questa funzione utilizza tail(1) per restituire solo l'ultimo valore, in base al age e terms_years dalla tabella di ricerca

def hlookup_function(age, terms_year):
result=  creditor_life_rates_tranpose[(creditor_life_rates_tranpose['age']== age) & (creditor_life_rates_tranpose['term_years'] <= terms_year)]['value'].tail(1).values[0]

return result

Poi vorrei chiamare la funzione come questa:

application['result'] = hlookup_function(application.age,(application_data.term_years).round(2))

Io mi aspettavo di avere questo come risultante Dataframe:

age, terms_years, results
49, 3.8, 21.40

ma ottengo questo errore: enter image description here

A proposito, il codice funziona, se mi passa i valori di questo tipo, ma non l'effettivo colonne di applicazione dataframe. Ma ho bisogno di passare effettivamente le colonne.

application['result'] = hlookup_function(49,3.8)
dataframe function pandas python
2021-11-24 04:36:22
1

Migliore risposta

0

Questa funzione pd.merge_asof esegue l'operazione stavo cercando ed è equivalente alla funzione HLOOKUP in Excel.

application_data2 = pd.merge_asof(application_data.sort_values(by=['term_years_lookup'],ascending=True)
,creditor_life_rates_tranpose.sort_values(by=['term_years_lookup'],ascending=True), 
on='term_years_lookup',by ='age_lookup')
2021-11-24 13:41:42

In altre lingue

Questa pagina è in altre lingue

Русский
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................