在我的df中,我有一个像这样的多索引:
val _email = ObservableField<String>()
var email: String
get() = _email.get()
set(value) = _email.set(value)
//use
fun login(view: View) {
val emailVal = email
}
在单个索引df上我会这样做:
df.index.names
FrozenList([u'Ticker', u'Date'])
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 189667 entries, (AAPL, 1992-08-31 00:00:00) to (^DJI, 2017-08-31 00:00:00)
然而,这不适用于multiindex,它只是在80/20中削减行。
注意:我不想随机抽样,只需根据日期拆分80/20。
任何线索?
修改
这是我获取相关数据的方式(除了两个以上的代码之外):
from sklearn.model_selection import train_test_split
df_train, df_test = train_test_split(df, test_size=0.2, shuffle=False)
答案 0 :(得分:3)
这是一种方法:
首先通过groupby ticker(索引级别0)获取测试组,然后按日期(降序)对每个结果组进行排序,然后使用选择获取前20%的数据
df_test = stock_data.groupby(level=0).apply(
lambda group: group.sort_index(
ascending=False).iloc[:int(len(group) * .2)]
).reset_index(level=0, drop=True)
df_train将是stock_data
中的所有记录而不是df_test中的记录,我们可以在多个索引上使用布尔掩码获取df_train
df_train = stock_data[~stock_data.index.isin(df_test.index)]
或者为df_test使用相同的代码,其中.2替换为8,ascending=False
替换为ascending=True