【问题标题】:Pandas: Conditional aggregation mean and medianPandas:条件聚合均值和中位数
【发布时间】:2017-09-16 20:51:35
【问题描述】:

设置

我正在用 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 拆分为两个数据帧——每个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',
        }

我该怎么做?

【问题讨论】:

    标签: python pandas dataframe conditional aggregation


    【解决方案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)
    

    【讨论】:

    • 我该死。谢谢!顺便说一句,badf.loc[1]badf.xs(1) 似乎都有效。
    猜你喜欢
    • 2018-09-29
    • 2020-02-27
    • 2021-08-24
    • 2013-02-21
    • 2019-08-10
    • 2018-02-19
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多