2017-04-20 49 views
1

设置熊猫:有条件的聚集平均数和中位数

我刮住房广告中Scrapy和分析与大熊猫的结果。我构建了数据框,在位置上进行分组并聚合在几个住房特征(例如租金)上。


问题

我希望构造相同dataframes,即分组超过位置以及聚集在壳体的特点,但现在也聚集有条件。

也就是说,我有一个名为type的每个房屋广告的特征,它是12。我想在地点上分组,并有条件地汇总住房特征type12


代码

group = ['borough','click district name for housing ads','district'] 
mdf['# for rent'] = 1 
aggregator = { 
     'median rent pw':'median', 
     'rent pw':'mean', 
     '# of roommates':'mean', 
     '# for rent':'sum', 
     } 

badf = mdf.groupby(group)['median rent pw','rent pw','# of roommates'].agg(aggregator)  

这是我工作的代码,不有条件地聚集。

我在想我可以在两个DataFrame中分割mdf - 每个type - 然后在两个帧上运行代码并将结果合并到一个表中。这似乎有点低效,但。

最好,我想代码做这样的事情:

aggregator = { 
     'median rent pw type 1 ':'median, conditionally on type = 1', 
     'median rent pw type 2 ':'median, conditionally on type = 2', 
     'median rent pw':'median', 
     'rent pw type 1':'mean, conditionally on type = 1', 
     'rent pw type 2':'mean, conditionally on type = 2', 
     'rent pw':'mean', 
     '# of roommates':'mean', 
     '# for rent':'sum', 
     } 

我怎么去?

回答

1

如果我没有记错的话,我想你可以只包括typegroupby

group = ['type', 'borough','click district name for housing ads','district'] 
mdf['# for rent'] = 1 
aggregator = { 
     'median rent pw':'median', 
     'rent pw':'mean', 
     '# of roommates':'mean', 
     '# for rent':'sum', 
     } 

badf = mdf.groupby(group)['median rent pw','rent pw','# of roommates'].agg(aggregator)  

那么你应该能够得到在type == 1

badf.loc[1] 

或者

badf.xs(1) 
+0

我会被诅咒的。谢谢!顺便说一句,看起来''badf.loc [1]'和'badf.xs(1)'工作。 – LucSpan