import pandas as pd from functions import * def calculate_anomaly(gsm_file, base_file): df_gsm = pd.read_csv( gsm_file, delimiter=" ", skiprows=1, names=["time", "lon", "lat", "f", "grad", "_", "quality"] ) df_gsm["lon"] = df_gsm["lon"].apply(convert_deg) df_gsm["lat"] = df_gsm["lat"].apply(convert_deg) df_gsm["time"] = df_gsm["time"].apply(time_to_seconds) df_gsm = df_gsm[["time", "lon", "lat", "f", "grad", "quality"]] df_gsm["time"] = df_gsm["time"].apply(round).astype(float) df_base = pd.read_csv( base_file, sep=r"\s+", skiprows=22, names=["date", "time", "doy", "x", "y", "z", "f"] ) df_base = df_base[df_base["f"] < 88000] df_base["time"] = df_base["time"].apply(datetime_to_seconds) result_df = pd.merge_asof( df_gsm, df_base[['time', 'f']], # берем только нужные колонки left_on='time', right_on='time', direction='nearest', suffixes=('_grad', '_base') ) result_df["delta_f"] = result_df["f_grad"] - result_df["f_base"] result_df = result_df[["lon", "lat", "time", "f_grad", "delta_f", "grad"]] result_df = result_df.rename(columns={"f_grad": "f", "grad": "grad_f"}) return result_df