在保持比例的同时进行采样

时间:2019-11-16 21:51:24

标签: python pandas dataframe sampling

由于内存问题(数据集大小为2.5GB,我的内存无法使用),我试图从数据集中获取样本。 df_12是原始数据帧,而df_12val是Series,其中包含状态的贬义,而值是数据帧中每个状态的出现次数(出现次数)。我希望每个状态都占用30%的空间以减少数据帧的大小,但我不知道如何从每个状态中获取30%的数据。

我将对数据进行一些ML建模。当我用Google搜索时,只能看到train_test_split,但是它并不允许我在保持相同比率的情况下对数据进行采样。

数据集df_12如下所示: df_12

和df_12val像这样: df_12val

1 个答案:

答案 0 :(得分:0)

是的,因此test_train_split的问题在于它将占用整个数据集的30%,而无需考虑您感兴趣的状态列,我认为要实现所需的功能,首先需要按状态细分数据集,即重采样,这里只包括数据集的细分。

首先,您需要获取所有可能状态的列表,这将需要按状态对数据进行拆分。

state_names = df['STABBR'].unique()

然后,我们获得了一个行列表,其中每个子列表都包含每种状态的行。

data_list_states = [ df.loc[df['STABBR'] == state] for state in state_names] 

现在您还需要对值进行操作

values_list_states =  [ df_12val.loc[df_12val[0] == state] for state in state_names] 

然后我们压缩数据以获取行。

final_data_values_list = []
for i in range(0,len(data_list_states))
   final_data_values_list.append(zip(data_list_states[i] , values_list_states[i] ))

现在在final_data_values_list中,您将具有按状态过滤的数据子列表,现在可以从每个列表中重新采样。