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 = 0
    rows = []
    # 处理数据转成json
    for 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 + 1
        rows.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'])

 

你可能感兴趣的:(python)