43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
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
|