2017-12-14 66 views
0

私は日付形式のインデックスを持つパンダデータフレーム(株価)を持っています。毎日ですが、就業日のみです。 私は基本的にいくつかの価格性能YTDと1年前から計算しようとします。 が私のデータフレーム内の実際の年の最初の日付を取得するには、私は次のメソッドを使用:Pythonの日付インデックス:今日から一年前に最も近い日付を見つける

today = str(datetime.date.today()) 
curr_year = int(today[:4]) 
curr_month = int(today[5:7]) 
first_date_year = (df[str(curr_year)].first_valid_index()) 

は、今私は一年前に最も近い日付取得しよう(last_valid_indexからちょうど1年を())。私は月と年を抽出することができましたが、それは正確ではありません。なにか提案を ?あなたが任意のデータを提供しなかったので、私はあなたが以下のように日付(文字列型)のリストを持っていることを

おかげ

+0

あなたは何を意味しますか'一年前'? 52週、365日または1年?便利な日付計算のためには、['.shift()'メソッドを提供する 'arrow'モジュールを使うことをお勧めします(http://arrow.readthedocs.io/en/latest/#replace-shift)。 – albert

+0

あなたはちょうど1年前に最も近い就業日を得ようとしていますか? 1年で休暇があるが、他の休暇がないときはどうしますか? –

答えて

1

を想定しています:

dates = ['11/01/2016', '12/01/2016', '02/01/2017', '03/01/2017'] 

あなたは、その後にそれを変換する必要があります日時フォーマットでは、私はパンダを使用することをお勧めします:

pd_dates = pd.to_datetime(dates) 

次に、今日と1年前に定義する必要があります。私はそのためのdatetimeを使用することをお勧めします:

today = datetime.today() 
date_1yr_ago = datetime(today.year-1, today.month, today.day) 

最後に、あなたがdate_1yr_ago値よりも大きい日付の日付のリストをスライスし、そのスライスの最初の値を取得する:

pd_dates[pd_dates > date_1yr_ago][0] 

これは最初に戻ります1年前の日付よりも大きい日付。

出力:

Timestamp('2017-02-01 00:00:00') 

次のコードで文字列にそのdatetime値に変換することができます:

datetime.strftime(pd_dates[pd_dates > date_1yr_ago][0], '%Y/%m/%d') 

出力:

'2017/02/01' 
関連する問題