
W pracy z danymi często pojawia się potrzeba łączenia tabel w oparciu o wartości bliskie, ale niekoniecznie identyczne. Właśnie wtedy z pomocą przychodzi funkcja pandas.merge_asof() w Pythonie. Jest to świetne narzędzie do dopasowywania rekordów w sposób optymalny, co szczególnie sprawdza się w analizie szeregów czasowych.
Co to jest pandas.merge_asof()?
Funkcja merge_asof() w bibliotece Pandas działa podobnie do klasycznego merge(), ale z jedną kluczową różnicą: zamiast łączyć dokładnie dopasowane wartości klucza, szuka najbliższej mniejszej lub równej wartości w drugim zbiorze danych. Dzięki temu doskonale nadaje się do analizy danych o charakterze czasowym, gdzie punkty danych nie zawsze idealnie się pokrywają.
Składnia funkcji
Podstawowa składnia merge_asof() wygląda następująco:
pd.merge_asof(left, right, on=None, left_on=None, right_on=None, by=None,
left_by=None, right_by=None, direction='backward', tolerance=None)
Najważniejsze parametry tej funkcji to:
left– pierwszy DataFrame (główny)right– drugi DataFrame, który będzie dołączanyon– nazwa kolumny używanej do łączenia, działa tylko jeśli nazwa jest wspólna dla obu tabelleft_on,right_on– nazwy kolumn do łączenia gdy w obu tabelach nazwy się różniąby– opcjonalny parametr do grupowania po dodatkowych polachdirection– sposób dopasowywania wartości:'backward'– łączy z najbliższą poprzednią wartością (domyślne)'forward'– łączy z najbliższą następną wartością'nearest'– łączy z najbliższą wartością (niezależnie od kierunku)
tolerance– określa maksymalny dopuszczalny zakres różnicy między dopasowywanymi wartościami
Przykład zastosowania
Aby lepiej zrozumieć działanie pandas.merge_asof(), załóżmy, że mamy dwa zestawy danych: jeden zawiera pomiary temperatury sprzedawane w sklepie, a drugi godzinowe dane pogodowe. Chcemy połączyć oba zbioru w taki sposób, by każdej transakcji przypisać najbliższą godzinowo temperaturę.
import pandas as pd
# Dane dotyczące transakcji
df_sales = pd.DataFrame({
"time": pd.to_datetime(["2024-06-01 09:15", "2024-06-01 10:45", "2024-06-01 13:10"]),
"product": ["Kawa", "Herbata", "Woda"],
"price": [10, 7, 3]
})
# Dane pogodowe
df_weather = pd.DataFrame({
"time": pd.to_datetime(["2024-06-01 09:00", "2024-06-01 10:00", "2024-06-01 11:00", "2024-06-01 12:00", "2024-06-01 13:00"]),
"temperature": [18, 20, 22, 21, 19]
})
# Scalanie danych z użyciem merge_asof
df_merged = pd.merge_asof(df_sales, df_weather, on="time", direction="backward")
print(df_merged)
Po uruchomieniu powyższego kodu, otrzymamy następujący wynik:
| time | product | price | temperature |
|---|---|---|---|
| 2024-06-01 09:15 | Kawa | 10 | 18 |
| 2024-06-01 10:45 | Herbata | 7 | 20 |
| 2024-06-01 13:10 | Woda | 3 | 19 |
Funkcja przyporządkowała każdej transakcji najbliższą chronologicznie wcześniejszą temperaturę.
Użycie tolerance do kontrolowania łączenia
Możemy ograniczyć dopasowywanie do określonej różnicy czasowej, np. maksymalnie 1 godziny:
df_merged = pd.merge_asof(df_sales, df_weather, on="time", direction="backward", tolerance=pd.Timedelta("1h"))
Jeśli różnica między wartościami przekracza podany zakres, dane nie zostaną połączone.
Kiedy warto używać merge_asof()?
merge_asof() sprawdza się najlepiej w przypadku:
- Analizy danych czasowych (np. parowanie transakcji z danymi pogodowymi, akcjami giełdowymi itp.)
- Łączenia pomiarów z różnych systemów, gdzie czas jest kluczowym elementem
- Interpolacji brakujących wartości w seriach czasowych
Podsumowanie
Funkcja pandas.merge_asof() to potężne narzędzie dla każdego, kto pracuje z danymi czasowymi. Umożliwia dopasowanie najbliższych wartości w sposób elastyczny i efektywny. Dzięki opcjom takim jak direction i tolerance, masz pełną kontrolę nad sposobem łączenia danych. Jeśli kiedykolwiek napotkasz problem, w którym tradycyjne merge() nie wystarcza – wypróbuj merge_asof() i przekonaj się, jak ułatwia życie.
Inny ciekawy artykuł:
Jak działa pandas idxmin w języku Python? Przykład zastosowania
Opanuj analizę danych w Pythonie z moim kursem!
Opanujesz podstawy programowania w Pythonie, w tym typy danych, zmienne, listy, słowniki, funkcje oraz obsługę błędów. Nauczysz się korzystać z biblioteki pandas do zaawansowanej analizy danych i pracy z różnymi rodzajami danych. Zrozumiesz proces analizy, eksploracji (EDA) i wizualizacji. Tworzenie własnych funkcji przygotuje Cię do rozmów kwalifikacyjnych i rozwiązywania rzeczywistych problemów biznesowych.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, PowerBI, Tableau i Pythona z certyfikatami!
🟨 Ekskluzywana ale pomagająca sobie społeczność.
🟩 Ponad 75 godzin materiałów video.
🟨 Spotkania LIVE co miesiąc.
🟩 Mój osobisty mentoring.

