2017-08-02 22 views
1
date_time={'Date_Fields':[datetime.date(2014,5,1),datetime.date(2015,5,1),datetime.date(2016,5,1),datetime.date(2018,5,1)]} 
date_time=pd.DataFrame(date_time) 
date_time["Analysis Period"]="" 

ちょっと戻って、36ヶ月の期間を3つの間隔に分割する「分析期間」というAmeneded列を作成する必要があります。たとえば、2014年5月〜2015年4月、2015年5月〜2016年4月、2016年5月〜2017年4月などです。これは私たちのローカルツールで使用されます。日付/時刻をピリオドに分割する文の場合

私はこのコードを以下のコードで達成することができましたが、手動で日付範囲を更新することなくこれを行うより効果的な方法があるかどうかを知りたかったのです。 また、以下のifステートメントに関して、もともと私は、対応する2つのelifステートメントでifステートメントを実行しようとしていました。しかし、それはうまくいかないようです。誰かがなぜその理由を説明できるのでしょうか?

はで

if ((date_time["Date_Fields"]>= datetime.date(2014,5,1)) & (date_time["Date_Fields"]<=datetime.date(2015,4,30))) is not False: 
date_time["Analysis Period"]=np.where(((date_time["Date_Fields"]>= datetime.date(2014,5,1)) & (date_time["Date_Fields"]<=datetime.date(2015,4,30))),'May 2014 to April 2015', date_time["Analysis Period"]) 

if ((date_time["Date_Fields"]>= datetime.date(2015,5,1)) & (date_time["Date_Fields"]<=datetime.date(2016,4,30))) is not False: 
date_time["Analysis Period"]=np.where(((date_time["Date_Fields"]>= datetime.date(2015,5,1)) & (date_time["Date_Fields"]<=datetime.date(2016,4,30))),'May 2015 to April 2016', date_time["Analysis Period"]) 

if ((date_time["Date_Fields"]>= datetime.date(2016,5,1)) & (date_time["Date_Fields"]<=datetime.date(2017,4,30))) is not False: 
date_time["Analysis Period"]=np.where(((date_time["Date_Fields"]>= datetime.date(2016,5,1)) & (date_time["Date_Fields"]<=datetime.date(2017,4,30))),'May 2016 to April 2017',date_time["Analysis Period"]) 
+2

'pd.cut()'が必要です。 – DyZ

+0

ありがとう、それに読んでください。 – Bjc51192

答えて

1

セットアップ
は、データフレームdate_time

date_time = pd.DataFrame(dict(
    Date_Fields=pd.date_range('2014-05-01', periods=12, freq='Q'), 
    Other_Field=np.arange(12) 
)) 

    Date_Fields Other_Field 
0 2014-06-30   0 
1 2014-09-30   1 
2 2014-12-31   2 
3 2015-03-31   3 
4 2015-06-30   4 
5 2015-09-30   5 
6 2015-12-31   6 
7 2016-03-31   7 
8 2016-06-30   8 
9 2016-09-30   9 
10 2016-12-31   10 
11 2017-03-31   11 

ソリューション
を考えてみましょう使用pd.Series.dt.to_periodをありがとうを使用して、4月に終了する年間期間を指定します。

date_time.assign(**{ 
    'Analysis Period': date_time.Date_Fields.dt.to_period('A-Apr') 
}) 

    Date_Fields Other_Field Analysis Period 
0 2014-06-30   0   2015 
1 2014-09-30   1   2015 
2 2014-12-31   2   2015 
3 2015-03-31   3   2015 
4 2015-06-30   4   2016 
5 2015-09-30   5   2016 
6 2015-12-31   6   2016 
7 2016-03-31   7   2016 
8 2016-06-30   8   2017 
9 2016-09-30   9   2017 
10 2016-12-31   10   2017 
11 2017-03-31   11   2017 
+1

すばらしい解決策! – Bjc51192

関連する問題