In answering this stackoverflow question, I found some interesting behavior when using a fill method while reindexing a dataframe.
This old bug report in pandas says that df.reindex(newIndex,method='ffill')
should be equivalent to df.reindex(newIndex).ffill()
, but that is NOT the behavior I'm witnessing
Here's a code snippet that illustrates the behavior
df = pd.DataFrame({'values': 2}, index=pd.DatetimeIndex(['2016-06-02', '2016-05-04', '2016-06-03']))
newIndex = pd.DatetimeIndex(['2016-05-04', '2016-06-01', '2016-06-02', '2016-06-03', '2016-06-05'])
print(df.reindex(newIndex).ffill())
print(df.reindex(newIndex, method='ffill'))
The first print statement works as expected. The second raises a
ValueError: index must be monotonic increasing or decreasing
What's going on here?
EDIT: Note that the sample df
intentionally has a non-monotonic index. The question pertains to the order of operations in df.reindex(newIndex, method='ffil')
. My expectation is as the bug-report says it should work- first reindex with the new index and then fill.
As you can see, the newIndex.is_monotonic
is True
, and the fill works when called separately but fails when called as a parameter to reindex
.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…