根据订单价格分组进行拆分

发布时间 2023-07-14 21:46:00作者: dontbealarmedimwithy

今天接到了个需求 需要将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

 基本逻辑是 按照价格进行排序,在分箱, 对每个分箱后的数据 进行编号, 对编号排序 就会将分箱的数据依次排列, 最后按照需要拆分的子表数量进行拆分

 

 遗留问题: 当表内价格分布差异较大时, 往往拆分结果不理想 嗯 还需优化...