I have a dataframe with a date index. I want to create a new column with a lagged value. That is, laggedfoo(1aug2016) = foo(1july2016)
I used dataframe.shift, but it didn't behave as expected; I can hack it to work, but I think I'm missing the big picture of how to treat and shift date indices.
When I shift by 1 'm', instead of shifting into the next month, it shifts to the end-of-month of the current month. (1July2016 becomes 30July2016, not 1Aug2016).
I can shift by 2 and get what I want, but I fear I'm missing some fundamental idea to using shift and the freq parameter

I think you need change frequency to month start frequency - MS - see offset-aliases:
import pandas as pd
    
fwd_df = pd.DataFrame(
    {
        "Dubai m1": {
            pd.Timestamp("2016-08-01 00:00:00"): 3, 
            pd.Timestamp("2016-07-01 00:00:00"): 2,
            pd.Timestamp("2016-09-01 00:00:00"): 4,
            pd.Timestamp("2016-06-01 00:00:00"): 1,
        }
    }
)
    
print(fwd_df["Dubai m1"])
# 2016-06-01    1
# 2016-07-01    2
# 2016-08-01    3
# 2016-09-01    4
# Name: Dubai m1, dtype: int64
    
print(fwd_df["Dubai m1"].shift(1, freq="MS"))
# 2016-07-01    1
# 2016-08-01    2
# 2016-09-01    3
# 2016-10-01    4
# Freq: MS, Name: Dubai m1, dtype: int64
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With