python按照某个字段,对目标按照给定的比例进行分层抽样

 # 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类型的变量

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值