I have a table of records with a position "stand" and a column timestamp or "datetime". I need to append this table with information on "acreg" and "flight".
The table with records (df_hvd
) has the following columns of interest:
datetime | stand | reason |
---|---|---|
022-08-08 02:55:15 | D02 | Technical |
I have a table with all flights (arriving and departing movements), and the corresponding start and end time of each movement. Based on the movement and stand, I want to retrieve the correct "acreg" and "flight". This source data looks like (df_events
):
acreg | flight | movement_type | start_datetime | end_datetime | position |
---|---|---|---|---|---|
PHTFM | OR1072 | AR-PK | 2022-08-08 02:24:44 | 2022-08-08 04:07:00 | D02 |
PHTFM | OR377 | PK-DP | 2022-08-08 12:15:00 | 2022-08-08 14:42:22 | D07 |
Note that the timestamp of the first table falls between the start and end times in the second table. I somehow need to find a way to performa a merge that understands that the record of interest corresponds to the first movement in the source data.
I tried to built a loop, but it is far too slow and it has some key errors:
for r in df_hvd.index:
for e in df_temp.index:
if df_hvd.at[r, "Positie"] == df_temp.at[r, "stand"]:
if df_hvd.at[r, "datetime"] <= df_temp.at[e, "end_datetime"] and df_hvd.at[r, "datetime"] >= df_temp.at[e, "start_datetime"]:
print(df_temp.at[r, "acreg"])
This also didn't work:
for e in df_temp.index:
stand = df_temp.at[e, "stand"]
start = df_temp.at[e, "start_datetime"]
end = df_temp.at[e, "end_datetime"]
acreg = df_temp.at[e, "acreg"]
df_hvd.loc[(df_hvd["datetime"] <= end) & (df_hvd["datetime"] >= start) & (df_hvd["Positie"] == stand), 'acreg'] = acreg
source https://stackoverflow.com/questions/75733938/merge-on-range-between-two-columns
Comments
Post a Comment