保持比例采样

问题描述 投票:0回答:1

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

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

数据集df_12如下所示:df_12

和df_12val像这样:df_12val

python pandas dataframe sampling
1个回答
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中,您将具有按状态过滤的数据子列表,现在可以从每个列表中重新采样。

© www.soinside.com 2019 - 2024. All rights reserved.