Pandas:条件聚合均值和中位数

Pandas: Conditional aggregation mean and median

设置

我正在使用 Scrapy 抓取房屋广告并使用 pandas 分析结果。

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


问题

我想构建相同的数据框,即根据位置进行分组并根据住房特征进行聚合,但现在也有条件地进行聚合。

也就是说,我有一个名为 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)    

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

我在想我可以将 mdf 分成两个 DataFrame – 每个 type – 然后 运行 两个框架上的代码并将结果合并为一个 table。虽然这似乎有点低效。

最好,我希望代码执行如下操作:

    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',
        }

我该怎么办?

如果我没记错的话,我想你可以在 groupby

中包含 type
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)