将Pandas日期索引转移到下一个月。

5
我有一个带日期索引的数据框。我想创建一个新列,其中包含滞后值。也就是说,laggedfoo(2016年8月1日)= foo(2016年7月1日)。
我使用了dataframe.shift,但它的行为与预期不符;我可以通过一些技巧来实现目标,但我认为我缺少如何处理和移动日期索引的大局观。
当我按1个月进行移位时,它并没有移动到下一个月,而是移动到当前月份的月末。(7月1日变成了7月30日,而不是8月1日)。
我可以用2进行移位并获得我想要的结果,但我担心我缺少使用shift和freq参数的一些基本思想。

enter image description here

1个回答

11

我认为你需要将频率更改为月初频率 - MS - 参见偏移别名

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接