Jak działa pandas merge_ordered w języku Python? Przykład zastosowania

Jak działa pandas merge_ordered w języku Python? Przykład zastosowania
„`html

Pandas to jedno z najważniejszych narzędzi w ekosystemie Pythona do analizy danych. Jedną z ciekawszych funkcji, jakie oferuje, jest merge_ordered(). Pozwala ona na łączenie dwóch ramek danych w uporządkowany sposób, co jest szczególnie przydatne przy analizach szeregów czasowych lub innych zbiorów danych wymagających zachowania kolejności.

Co to jest pandas.merge_ordered?

Funkcja merge_ordered() działa podobnie do klasycznego merge(), ale jej główne zadanie to scalanie ramek danych w sposób, który zachowuje porządek sortowania. Innymi słowy, jeśli pracujesz z danymi, które mają klucz porządkowy (najczęściej oś czasu), to ta funkcja pomoże Ci połączyć dane w logiczny sposób bez utraty ich kolejności.

Ogólna składnia funkcji wygląda następująco:

import pandas as pd

pd.merge_ordered(left, right, on=None, by=None, fill_method=None, suffixes=("_x", "_y"), how="outer")

Teraz przeanalizuję najważniejsze parametry, jakie możemy wykorzystać podczas używania merge_ordered().

Parametry funkcji merge_ordered()

  • left – pierwsza ramka danych.
  • right – druga ramka danych.
  • on – kolumna (lub lista kolumn), według której następuje łączenie.
  • by – opcjonalny argument, który pozwala dodatkowo grupować dane przed połączeniem.
  • fill_method – jeśli jest ustawiony na ffill, to brakujące wartości zostaną uzupełnione ostatnią dostępną wartością.
  • suffixes – dodaje sufiksy do kolumn, które występują w obu ramach danych.
  • how – określa sposób łączenia, domyślnie "outer" (pełne łączenie z zachowaniem wszystkich rekordów), ale można użyć też "inner", "left" lub "right".

Przykład zastosowania merge_ordered()

Zobaczmy, jak działa merge_ordered() w praktyce. Załóżmy, że mamy dwie ramki danych reprezentujące ceny akcji dwóch firm w różnych dniach:

import pandas as pd

df1 = pd.DataFrame({
    "date": ["2024-06-01", "2024-06-03", "2024-06-05"],
    "company": ["A", "A", "A"],
    "price": [100, 102, 105]
})

df2 = pd.DataFrame({
    "date": ["2024-06-02", "2024-06-04", "2024-06-05"],
    "company": ["B", "B", "B"],
    "price": [200, 198, 195]
})

merged_df = pd.merge_ordered(df1, df2, on="date", suffixes=("_A", "_B"), how="outer")
print(merged_df)

Otrzymamy tabelę:

date company_A price_A company_B price_B
2024-06-01 A 100 NaN NaN
2024-06-02 NaN NaN B 200
2024-06-03 A 102 NaN NaN
2024-06-04 NaN NaN B 198
2024-06-05 A 105 B 195

Jak widać, dane zostały połączone w sposób uporządkowany i zachowano chronologię dat. Wynik zawiera brakujące wartości tam, gdzie jedna z firm nie miała dostępnych danych.

Uzupełnianie brakujących wartości – fill_method

Często przy analizie danych chcemy uzupełnić brakujące wartości np. metodą forward fill (ffill), czyli wypełnić je ostatnią dostępną wartością. Możemy to osiągnąć w sposób pokazany poniżej:

merged_df_ffill = pd.merge_ordered(df1, df2, on="date", suffixes=("_A", "_B"), how="outer", fill_method="ffill")
print(merged_df_ffill)

Teraz brakujące wartości w kolumnach price_A i price_B zostaną wypełnione ostatnią dostępną ceną.

Podsumowanie

Funkcja merge_ordered() w Pandas to potężne narzędzie do łączenia danych w sposób uporządkowany. Jest szczególnie przydatna przy analizie szeregów czasowych oraz sytuacjach, gdzie kluczowe jest zachowanie kolejności danych.

Najważniejsze zalety merge_ordered() to:

  • Łączenie danych w uporządkowany sposób.
  • Obsługa różnych metod uzupełniania brakujących wartości.
  • Możliwość kontrolowania sposobu scalania danych (how="outer", how="inner" itp.).

Jeśli pracujesz nad analizą danych obejmujących chronologiczne zdarzenia, pandas merge_ordered() może okazać się niezwykle przydatnym narzędziem, ułatwiającym uporządkowane scalanie różnych zbiorów danych.

„` Inny ciekawy artykuł: Jak działa pandas merge_asof w języku Python? Przykład zastosowania
KajoDataSpace