import pandas
df1 = pandas.DataFrame([[1.002,18],[2,22],[3,77],[5,23]], columns=["timestamp", "max_val"])
df2 = pandas.DataFrame([[1,33],[2,12],[3.001,87],[4,54]], columns=["timestamp", "max_val"])
df2['Rank'] = df2['timestamp'].rank()
merged_df = (pandas.merge_asof(df1, df2,
on='timestamp',
direction='nearest',
tolerance=0.01)
.merge(df2, on='Rank', how='outer')
.assign(timestamp = lambda x: x.filter(like='timestamp').bfill(1).iloc[:,0])
.assign(max_val=lambda x: x.filter(like='max_val').max(1))
.sort_values('timestamp')
[['timestamp','max_val']]
)
print(df1)
print(df2)
print(merged_df)
aW1wb3J0IHBhbmRhcwoKZGYxID0gcGFuZGFzLkRhdGFGcmFtZShbWzEuMDAyLDE4XSxbMiwyMl0sWzMsNzddLFs1LDIzXV0sIGNvbHVtbnM9WyJ0aW1lc3RhbXAiLCAibWF4X3ZhbCJdKQpkZjIgPSBwYW5kYXMuRGF0YUZyYW1lKFtbMSwzM10sWzIsMTJdLFszLjAwMSw4N10sWzQsNTRdXSwgY29sdW1ucz1bInRpbWVzdGFtcCIsICJtYXhfdmFsIl0pCgpkZjJbJ1JhbmsnXSA9IGRmMlsndGltZXN0YW1wJ10ucmFuaygpCgptZXJnZWRfZGYgPSAocGFuZGFzLm1lcmdlX2Fzb2YoZGYxLCBkZjIsIAogICAgICAgICAgICAgIG9uPSd0aW1lc3RhbXAnLAogICAgICAgICAgICAgIGRpcmVjdGlvbj0nbmVhcmVzdCcsIAogICAgICAgICAgICAgIHRvbGVyYW5jZT0wLjAxKQogICAubWVyZ2UoZGYyLCBvbj0nUmFuaycsIGhvdz0nb3V0ZXInKQogICAuYXNzaWduKHRpbWVzdGFtcCA9IGxhbWJkYSB4OiB4LmZpbHRlcihsaWtlPSd0aW1lc3RhbXAnKS5iZmlsbCgxKS5pbG9jWzosMF0pCiAgIC5hc3NpZ24obWF4X3ZhbD1sYW1iZGEgeDogeC5maWx0ZXIobGlrZT0nbWF4X3ZhbCcpLm1heCgxKSkKICAgLnNvcnRfdmFsdWVzKCd0aW1lc3RhbXAnKQogICBbWyd0aW1lc3RhbXAnLCdtYXhfdmFsJ11dCikKCnByaW50KGRmMSkKcHJpbnQoZGYyKQpwcmludChtZXJnZWRfZGYp