熊猫:条件聚合均值和中位数

时间:2017-04-20 09:41:40

标签: python pandas dataframe conditional aggregation

设置

我正在用Scrapy抓住住房广告并用熊猫分析结果。

我构建数据框架,对位置进行分组并聚合多个住房特征(例如租金)。

<小时/> 的问题

我想构建相同的数据帧,即分配位置和聚合住房特征,但现在也有条件地聚合。

也就是说,我对每个名为type的住房广告都有一个特征,即12。我想在type 12上有条件地对地理位置进行分组并汇总住房特征。

<小时/> 的代码

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 个答案:

答案 0 :(得分:1)

如果我没有弄错,我想你可以在type

中加入groupby
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)