4

日付インデックスを持つデータフレームがあります。ラグ値を持つ新しい列を作成したいと考えています。つまり、laggedfoo(1aug2016) = foo(1july2016)

dataframe.shift を使用しましたが、期待どおりに動作しませんでした。ハックして機能させることはできますが、日付インデックスを処理およびシフトする方法の全体像が欠けていると思います。

1 'm' シフトすると、次の月にシフトするのではなく、当月の月末にシフトします。(2016 年 7 月 1 日は、2016 年 8 月 1 日ではなく、2016 年 7 月 30 日になります)。

shift2 シフトして必要なものを取得できますが、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 に答える