実現したいこと
時系列データを範囲ごとにグループ化('Group'カラムを追加)したい
使用データ
python
1import pandas as pd 2import io 3 4data = """ 5SaleDate,UserId 62017-01-01,47 72016-07-01,48 82017-02-01,49 92018-04-01,50 102019-05-06,51 11""" 12df = pd.read_csv(io.StringIO(data), parse_dates=['SaleDate']) 13df 14 15# SaleDate UserId 16#0 2017-01-01 47 17#1 2016-07-01 48 18#2 2017-02-01 49 19#3 2018-04-01 50 20#4 2019-05-06 51
希望データ
python
1# SaleDate UserId Group 2#0 2017-01-01 47 2 3#1 2016-07-01 48 1 4#2 2017-02-01 49 2 5#3 2018-04-01 50 4 6#4 2019-05-06 51 6
試したこと
python
1def conv_func(row): 2 3 if row['SaleDate'] >= dt.datetime(2016,7,1) and row['SaleDate'] <= dt.datetime(2016,12,1): 4 return 1 5 elif row['SaleDate'] >= dt.datetime(2017,1,1) and row['SaleDate'] <= dt.datetime(2017,6,1): 6 return 2 7 elif row['SaleDate'] >= dt.datetime(2017,7,1) and row['SaleDate'] <= dt.datetime(2017,12,1): 8 return 3 9 elif row['SaleDate'] >= dt.datetime(2018,1,1) and row['SaleDate'] <= dt.datetime(2018,6,1): 10 return 4 11 elif row['SaleDate'] >= dt.datetime(2018,7,1) and row['SaleDate'] <= dt.datetime(2018,12,1): 12 return 5 13 elif row['SaleDate'] >= dt.datetime(2019,1,1) and row['SaleDate'] <= dt.datetime(2019,6,1): 14 return 6 15 else: 16 raise RuntimeError(str(row)) 17 18df['Group'] = df.apply(lambda cols: conv_func[cols['UserId']], axis=1)
発生するエラー
TypeError: ("'function' object is not subscriptable", 'occurred at index 0')
→ 他にいい方法があれば、ご教授いただきたいです。
何卒よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。