根据订单价格分组进行拆分
今天接到了个需求 需要将excel表内的 订单 按照价格 分为多个子表, 尽可能地让每个子表的金额总计接近
df['price'] = df['price'].astype('int64') df.sort_values(by='price', inplace=True) # 分箱 #df['cate'] = pd.cut(df.price, bins=5, labels=['A','B','C','D','E']) # 按照价格来分箱 df['cate'] = pd.cut(df.price, [0,200,600,900,3000,9999], labels=['A','B','C','D','E']) # 对组内生成序号(组内排序rank) df['rank'] = df['price'].groupby(df['cate']).rank(method='first',ascending=True) # 按照组内排序, 再次升序排序 df.sort_values(by='rank', inplace=True) # 根据拆分数量 进行拆分 sepa = 5 # 生成拆分标识 #df['separate'] = pd.cut(df.price, , labels=['A','B','C','D','E']) # 填充df 长度 的 拆分数标识列表 #df['separate'] = df.apply(lambda x: for i in ) df['separate'] = (math.ceil(df.shape[0]/sepa)*list(range(5)))[:-1] df
基本逻辑是 按照价格进行排序,在分箱, 对每个分箱后的数据 进行编号, 对编号排序 就会将分箱的数据依次排列, 最后按照需要拆分的子表数量进行拆分
遗留问题: 当表内价格分布差异较大时, 往往拆分结果不理想 嗯 还需优化...