概述
# data : 抽样数据框,
# df_col_partition : 分层变量名,
# df_col_mark : 目标标识字段,
# multiply : 非目标用户与目标用户比例
def stratifiedSampling(data,df_col_partition,df_col_mark,multiply):
if (data[df_col_mark] == 0).sum() / (data[df_col_mark] == 1).sum() > multiply :
select_0 = multiply * (data[df_col_mark] == 1).sum()
else :
select_0 = (df_col_mark == 0).sum()
df_0 = data[data[df_col_mark] == 0]
df_1 = data[data[df_col_mark] == 1]
temp = df_0.groupby(by = df_col_partition)
temp_df = pd.DataFrame(temp.size().reset_index(name = 'cnt'))
temp_df['select_cnt'] = round((temp_df['cnt'] / temp_df['cnt'].sum()) * select_0)
######
result_sample = pd.DataFrame(columns = df_0.columns.values.tolist())
for partition in temp_df[df_col_partition]:
temp_tb = df_0[df_0[df_col_partition] == partition]
temp_sampling = temp_tb.sample(n = int(temp_df[temp_df[df_col_partition] == partition]['select_cnt'].values) ,replace = False,)
result_sample = result_sample.append(temp_sampling)
result_sample = result_sample.append(df_1)
return result_sample
该方法返回的是目标字段按照给定比例的一个DataFrame类型的变量
最后
以上就是无私小熊猫为你收集整理的python按照某个字段,对目标按照给定的比例进行分层抽样的全部内容,希望文章能够帮你解决python按照某个字段,对目标按照给定的比例进行分层抽样所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复