Funkcja pandy, ekwiwalent wyszukaj. poziomo w programie Excel

0

Pytanie

Jest taka df "creditor_life_rates_tranpose"który jest tabelą wyszukiwania:

enter image description here

Próbuję znaleźć wartość, oparte na kluczach "age"i "term_years"i zapisać z powrotem w mój podstawowy ramka danych "aplikacja".

Dla danych testowych za pomocą podstawowego ramka danych "application"zawiera kolumny "age", "term_years"z wartościami 49 3,8 pozdrawiam.

Aplikacja bazowego ramki danych przedstawiono poniżej:

age, terms_years
49, 3.8

Widzimy, że w wieku 49 lat znajduje się w tabeli wyszukiwania, ale tak jak 3.8 nie znajduje się w term_years kolumna tabeli wyszukiwania potrzebuję, aby spojrzał w górę, korzystając z największą wartość, która jest mniejsza niż 3,8. W tym przypadku byłoby to 3,5. W konsekwencji, wartość, która musi być zwrócony wynosi 21,40.

Starałem się napisać tę funkcję za pomocą tail(1), aby oddać ostatnią wartość w oparciu na age i terms_years z tabeli wyszukiwania

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

Następnie ja bym wywołał funkcję w następujący sposób:

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

Spodziewałem się dostać to w postaci wypadkowego ramki danych:

age, terms_years, results
49, 3.8, 21.40

ale pojawia się ten błąd: enter image description here

Przy okazji, kod działa, jeśli przekazuję takie wartości, ale nie rzeczywiste kolumny ramki danych aplikacji. Ale muszę faktycznie przejść kolumny.

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

Najlepsza odpowiedź

0

Ta funkcja pd.merge_asof wykonuje operację, której szukałem, i jest odpowiednikiem funkcji wyszukaj. poziomo w programie 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

W innych językach

Ta strona jest w innych językach

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