質問: 以下のようなdata内の開始月・終了月のデータから月ごとに継続フラグを付けたいです。 開始月 0 201602 1 201602 2 201601 3 201603 終了月 0 201701 1 201612 2 201701 3 201702 ↓ 201601 201602 201603 ... 201611 201612 201701 201702 0 0 1 1 1 1 1 0 1 0 1 1 1 1 0 0 2 1 1 1 1 1 1 1 3 0 0 1 1 1 1 0 data は pandasのDataFrameに格納されています。 環境 3.6.0 |Anaconda 4.3.0 (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC v.1900 64 bit (AMD64)] In [ ]: よろしくお願いいたします。
回答: サンプルを挙げておきます。 *data.csv* ``` 開始月,終了月 201602,201701 201602,201612 201601,201701 201603,201702 ``` ``` import pandas as pd # データ読み込み myparser = lambda x: pd.datetime.strptime(x, '%Y%m') df = pd.read_csv("data.csv", parse_dates=['開始月','終了月'], date_parser=myparser) # New DataFrame生成部 lst = [] for d in pd.date_range('20160101', '20170501',freq='MS'): s = (df['開始月'] <= d) & (df['終了月'] >= d) lst.append(s.rename(d.strftime("%Y/%m")).astype(int)) df = pd.concat(lst, axis=1) print(df) ``` 簡単に手順を説明すると 1. pandas.date_range() で **column_name** となる 1月毎の日付データを生成する。 2. 上記の日付データでループを回して、元データの開始月、終了月の範囲内かの Boolean List(pandas.Series)を生成 3. 上記のBoolean Listをint(0 or 1)に変換 4. 上のSeriesを **pandas.concat()** にて **pandas.DataFrame()** にまとめる となっております。