
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.
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, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.