Pandas version checks
-
[x] I have checked that this issue has not already been reported.
-
[x] I have confirmed this bug exists on the latest version of pandas.
-
[x] I have confirmed this bug exists on the main branch of pandas.
Reproducible Example
import pandas as pd
import datetime as dt
print(pd.__version__) # 2.2.3
left = pd.DataFrame({
'left_date': pd.date_range(dt.date(2025, 1, 1), dt.date(2025, 1, 5)),
})
left = left.drop([0, 1])
right = pd.DataFrame({
'right_date': pd.date_range(dt.date(2025, 1, 1), dt.date(2025, 1, 5)),
'value': range(5)
})
merged = pd.merge_asof(left, right, left_on='left_date', right_on='right_date')
index_before = left.index.tolist()
index_after = merged.index.tolist()
print(index_before) # [2, 3, 4] since first two dropped
print(index_after) # should be [2, 3, 4] but is [0, 1, 2]
Issue Description
merge_asof is has the unexpected side effect of resetting a RangeIndex. If there are gaps in the RangeIndex in the left dataframe ahead of the call, there will be no gaps in the dataframe resulting from the call.
Expected Behavior
By default, I would expect the index to be untouched, or at least expect an ignore_index keyword argument to be able to control this behavior.
Installed Versions
Comment From: rhshadrach
Thanks for the report! I do not see any indication in the documentation that this should preserve the index, and taking a look at the implementation it seems apparent to me that it wasn't intended to. Reworking this issue as an enhancement request.
If there is some indication in the docs that it should preserve the index, please do let us know.
Comment From: wahsmail
Ok agreed, its not in the documentation. I noticed that pd.merge has the same effect - the docs of which say "If joining columns on columns, the DataFrame indexes will be ignored."
Philosophically I would think that left joins preserve the shape (and index) of the left dataframe. But obviously for inner/outer joins, this becomes more ambiguous.
I'll just plan to workaround this going forward, thanks.
Comment From: rhshadrach
I do think if any change is to be made here, it should be made across merge operations to maintain consistency. This would be a rather big change, and I don't see the impact as being worth the behavior change. Marking as a closing candidate.