Pandas Dataframe:通过groupby操作创建的复合索引访问

时间:2016-02-22 20:15:34

标签: python pandas indexing group-by multi-index

我想计算从两个数据集收集的组特定比率。 使用

从数据库中读取两个Dataframe
leases = pd.read_sql_query(sql, connection)
sales = pd.read_sql_query(sql, connection)

一个用于出售的房地产,另一个用于出租物品。 然后我按他们的城市和我感兴趣的类别对他们进行分组:

leasegroups = leases.groupby(['IDconjugate', "city"])
salegroups = sales.groupby(['IDconjugate', "city"])

现在我想知道每个类别和城市最便宜的租赁对象与最便宜的出售对象之间的比率,以获得可能回报的下限:

minlease = leasegroups['price'].min()
maxsale = salegroups['price'].max()
ratios =  minlease*12/maxsale

我得到的输出如下:类别 - 城市:比率 但我无法按城市或类别访问比率对象。我尝试使用以下方法创建新的数据框:

newframe = pd.DataFrame({"Minleases" : minlease,"Maxsales" : maxsale,"Ratios" : ratios})
newframe = newframe.loc[newframe['Ratios'].notnull()]

给了我正确的行,newframe.index返回组。

index.name提供 ['IDconjugate','city'] ,但索引结果为 KeyError 。如何从不同的组中制作索引:ID0 + city1,ID0 + city2等...?

编辑: 输出如下:

                               Maxsales  Minleases    Ratios
IDconjugate city
1           argeles gazost        59500        337  0.067966
            chelles              129000        519  0.048279
            enghien-les-bains    143000        696  0.058406
            esbly                117990        495  0.050343
            foix                  58000        350  0.072414

目标是选择最高比率并用散景绘制它们,这需要一个 dataframe对象,并根据我的理解绘制列与索引:

topselect = ratio.loc[ratio["Ratios"] > ratio["Ratios"].quantile(quant)] 

dots = Dot(topselect, values='Ratios', label=topselect.index, tools=[hover,],
               title="{}% best minimal Lease/Sale Ratios per City and Group".format(topperc*100), width=600)

我真的只需要索引作为原始顺序中的列表,因此以下工作:

ids = []
cities = []
for l in topselect.index:
    ids.append(str(int(l[0])))
    cities.append(l[1])

newind = [i+"_"+j for i,j in zip(ids, cities)]
topselect.index = newind

现在该图在x轴上显示1_city1 ... 1_city2 ... n_cityX。但我认为在熊猫框架内必须有一些显而易见的方法,我不知道。

0 个答案:

没有答案