输入数据:
import numpy as np
import pandas as pd
data = np.array(
[['DAY_1','afds',5],
['DAY_1','rtws', 4],
['DAY_1','gtssd', 2],
['DAY_2','ititl', 4],
['DAY_2','uius', 7],
['DAY_3','hyaah', 6],
['DAY_4','apsaj', 9]])
df = pd.DataFrame(data,columns=['DATEDAY','TRANSACTION_ID','PRICE'])
结果df:
TRANSACTION_ID PRICE
DATEDAY
DAY_1 afds 5
DAY_1 rtws 4
DAY_1 gtssd 2
DAY_2 ititl 4
DAY_2 uius 7
DAY_3 hyaah 6
DAY_4 apsaj 9
解决方案:
from sklearn.model_selection import TimeSeriesSplit
tscv = TimeSeriesSplit(2)
for train_index, test_index in tscv.split(days):
print ('------------------------------')
train_days, test_days = days[train_index], days[test_index]
X_train, X_test = df.loc[train_days], df.loc[test_days]
print ('train:', X_train, '
')
print ('test:', X_test, '
')
输出:
------------------------------
train: TRANSACTION_ID PRICE
DATEDAY
DAY_1 afds 5
DAY_1 rtws 4
DAY_1 gtssd 2
DAY_2 ititl 4
DAY_2 uius 7
test: TRANSACTION_ID PRICE
DATEDAY
DAY_3 hyaah 6
------------------------------
train: TRANSACTION_ID PRICE
DATEDAY
DAY_1 afds 5
DAY_1 rtws 4
DAY_1 gtssd 2
DAY_2 ititl 4
DAY_2 uius 7
DAY_3 hyaah 6
test: TRANSACTION_ID PRICE
DATEDAY
DAY_4 apsaj 9
注1:我们假设日期列可以排序。在此示例中,DAY_X 排序不好,例如,因为 DAY_11 会放在 DAY_2 之前。如果我们只知道当天的数字X,那么我们需要在列中输入X,而不是DAY_X,例如,我们可能会这样做:
df['DATEDAY'] = [int(x.split('_')[1]) for x in df['DATEDAY']]
注意2:如果我们想避免将DATEDAY作为数据帧的索引,我们可以简单地重置X_train和X_test的索引:
for train_index, test_index in tscv.split(days):
print ('------------------------------')
train_days, test_days = days[train_index], days[test_index]
X_train, X_test = df.loc[train_days].reset_index(), df.loc[test_days].reset_index()
print ('train:
', X_train, '
')
print ('test:
', X_test, '
')
输出:
------------------------------
train:
DATEDAY TRANSACTION_ID PRICE
0 DAY_1 afds 5
1 DAY_1 rtws 4
2 DAY_1 gtssd 2
3 DAY_2 ititl 4
4 DAY_2 uius 7
test:
DATEDAY TRANSACTION_ID PRICE
0 DAY_3 hyaah 6
------------------------------
train:
DATEDAY TRANSACTION_ID PRICE
0 DAY_1 afds 5
1 DAY_1 rtws 4
2 DAY_1 gtssd 2
3 DAY_2 ititl 4
4 DAY_2 uius 7
5 DAY_3 hyaah 6
test:
DATEDAY TRANSACTION_ID PRICE
0 DAY_4 apsaj 9