pandas简单应用---组内排序

需求描述:获取每个户型下租金前十的小区名

  1. 原数据格式
    房子名小区名户型价格
        

     

  2. groupby 的level参数起到关键作用

level:int,level name或其序列,默认为None

如果index是MultiIndex(分层),则按特定级别或级别分组

def price_by_xiaoqu_and_huxing():df = pd.read_sql(select([HouseModel.xiaoqu,HouseModel.huxing,HouseModel.price]), engine)# 得到每种户型每个小区的租金平均值df = df.groupby(['huxing', 'xiaoqu'])['price'].mean()# 组内排序(0表示户型组内排序,value是平均租金,按value排序)grouped = df.groupby(level=0, group_keys=False).nlargest(10)j = 0rows = []# 处理数据转成jsonfor i in grouped.index.labels[0]:a = grouped.index.labels[0][j]b = grouped.index.labels[1][j]huxing = grouped.index.levels[0][a]xiaoqu = grouped.index.levels[1][b]price = grouped[j]j = j + 1rows.append({'huxing': huxing, 'xiaoqu': xiaoqu, 'price': price})return rows

df.groupby(['huxing', 'xiaoqu'])['price'].mean()这段代码得出来的数据是这样的

huxing  xiaoqu          
1室0厅    万达广场(周浦)             2900.0上南一村                 3750.0上南三村                 4200.0上南四村                 4300.0东建新村                 3500.0东昌新村                 4800.0东陆新村七街坊              3400.0兰园小区                 5000.0南码头路193弄             3300.0塘桥小区                 3800.0复地万科活力中心            18895.0大华锦绣华城(十二街区)         4600.0宁阳小区                 3950.0展想悦廷                 3800.0崂山三村                 3950.0巨东小区                 4500.0巨西小区                 4000.0张杨路370弄              4500.0德州四村                 3850.0思浦小区                 3300.0招远小区                 5200.0朱家滩小区                3800.0桃林一小区                4700.0梅园一街坊                4700.0梅园六街坊                4300.0梅园新村(浦东)             4300.0沪东新村                 3500.0泾西一村                 3300.0济阳三村                 3800.0浦三路601弄              3100.0...   

其后再groupby一次利用level,进行组内排序

huxing  xiaoqu          
1室0厅    复地万科活力中心            18895.000000阳光欧洲城(别墅)           11000.000000招远小区                 5200.000000兰园小区                 5000.000000浦东大道435-437号(单)      5000.000000东昌新村                 4800.000000桃林一小区                4700.000000梅园一街坊                4700.000000羽北小区                 4700.000000潍坊九村                 4650.000000

最好没找到处理index的方法,自己遍历转换了,index其实是这样的数据

MultiIndex(levels=[['1室0厅', '1室1厅', '1室2厅', '2室0厅', '2室1厅', '2室2厅', '3室0厅', '3室1厅', '3室2厅', '3室3厅', '4室0厅', '4室1厅', '4室2厅', '4室3厅', '4室4厅', '5室1厅', '5室2厅', '5室', '7室3厅'], ['BPC陆家嘴创业街区', '万科五玠坊', '万科提香别墅', '万邦都市花园', '上海滩花园洋房', '上船大楼', '世茂湖滨花园(公寓)', '世茂滨江花园', '东园一村', '东园四村', '东园雅集轩', '东方园', '中新公寓', '中粮海景壹号', '中芯花园(公寓)', '久阳滨江公寓', '九龙仓滨江壹十八', '云台大厦', '云间绿大地', '仁恒公园世纪', '仁恒滨江园', '保利One56', '兰园小区', '凯德嘉博名邸', '华夏金桂四季全景台', '四季雅苑(公寓)', '四季雅苑(别墅)', '国信世纪海景', '圣马丽诺桥语', '复地万科活力中心', '大华锦绣华城(十七街区)(别墅)', '大华锦绣华城(十四街区)', '家化滨江苑', '尚海郦景', '展想悦廷'招远小区', '文兰小区', '新城碧翠', '新塘桥生活广场', '新洲豪园', '昌里花园', '明星花苑', '晓园', '晶耀名邸', '桃林一小区', '桃林小区', '梅园一街坊', '梅园新村(浦东)', '欣周花园', '汤臣一品', ''海怡别墅(别墅)', '涵乐园', '滨江凯旋门', '潍坊七村', '潍坊三村', '潍坊九村', '潍坊二村', '潍坊十村', '爱法珑庭', '爵士大厦', '环球翡翠湾花园(别墅)', '瑞苑公寓', '界龙新世纪公寓', '白金瀚宫', ' '盛大金磐', '盛族家园-悉尼阳光·悉尼星光', '碧云东方公寓', '碧云新天地(一期)', '碧云新天地(二期)', '碧云花园', '立诚苑', '竹园高层', '第五大道', '紫竹馨苑', '维诗凯亚', '绿地东上海', '绿宝园', 花园', '逸翠公馆', '金桥瑞仕花园', '金爵别墅', '锦三角花园(公寓)', '锦绣一方名苑', '锦绣满堂花园', '长城珑湾', '阳光欧洲城(别墅)', '陆家嘴东和公寓', '陆家嘴锦绣前城', '陆家嘴锦绣里', '雍景台', '香梅花园(三-五期)', '香榭丽花园', '高行绿洲(四期)', '黄山始信苑']],labels=[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22], [41, 117, 53, 29, 71, 13, 62, 64, 104, 79, 74, 7, 85, 46, 82, 122, 22, 97, 34, 54, 7, 36, 44, 48, 111, 105, 15, 75, 33, 115, 5, 32, 65, 78, 77, 81, 80, 8, 29, 79, 119, 88, 82, 0, 34, 55, 123, 83, 91, 30, 76, 72, 109, 121, 89, 7, 27, 26, 6, 45, 73, 5, 125, 124, 61, 50, 88, 56, 9, 63, 119, 110, 58, 92, 28, 109, 38, 99, 89, 94, 39, 7, 72, 118, 72, 84, 108, 113, 49, 52, 96, 84, 120, 14, 11, 47, 66, 100, 57, 35, 67, 20, 51, 38, 72, 109, 40, 68, 37, 101, 25, 1, 40, 72, 87, 2, 111, 102, 90, 117, 2, 24, 116, 17, 21, 86, 100, 51, 99, 27, 68, 85, 72, 87, 23, 112, 4, 72, 25, 10, 40, 87, 101, 70, 112, 2, 43, 18, 42, 103, 106, 95, 98, 114, 107, 87, 69, 59, 31, 3, 12, 25, 60, 102, 19, 49, 16, 93]],names=['huxing', 'xiaoqu'])

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部