4

我有一个带有日期索引的数据框。我想创建一个具有滞后值的新列。也就是说,laggedfoo(1aug2016) = foo(1july2016)

我使用了 dataframe.shift,但它的表现不如预期;我可以破解它来工作,但我认为我错过了如何处理和移动日期索引的全局。

当我移动 1 'm' 时,它不会移动到下个月,而是移动到当月的月底。(2016 年 7 月 1 日变为 2016 年 7 月 30 日,而不是 2016 年 8 月 1 日)。

我可以移动 2 并得到我想要的,但我担心我错过了一些基本shift的想法来使用和freq参数

在此处输入图像描述

4

1 回答 1

10

我认为您需要将频率更改为month start frequency- MS- 请参阅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
于 2016-06-15T06:47:33.360 回答