【问题标题】:Pandas groupby mean mulitple columns and count single columnPandas groupby 表示多列并计算单列
【发布时间】:2017-08-06 15:19:36
【问题描述】:

我正在使用 BS4 抓取房屋广告,并使用 Pandas 分析数据。

以下命令,

madrid_rooms_district=df.groupby('district', as_index=False)['rent','size house, m2', 'price per m2','deposit'].agg(['mean', 'size'])

生成一个表,每行一个区域,每列区域的'rent','size house, m2', 'price per m2','deposit' 均值。这就是我需要的。

我还需要 一个 列显示每个地区的广告数量,因此 .agg() 中的 'size'。但是,该命令的当前设置为我提供了 列显示广告数量,['rent','size house, m2', 'price per m2','deposit'] 中的每个项目一列。

如何将“计数”列的数量从四减少到一?

例如我有,

district | rent; mean | rent; size | size house, m2; mean | size house, m2; mean | ...
   -----------------------------------------------------------------------------------
   A     |    300     |     2      |        100           |       2              | ...
   B     |    400     |     6      |        200           |       6              | ...
   C     |    500     |     3      |        120           |       3              | ...

我需要,

district | rent; mean | size house, m2; mean | price per m2; mean | deposit; mean | count
   ---------------------------------------------------------------------------------------
   A     |    300     |        100           |        15          |       1       |   2
   B     |    400     |        200           |        14          |       2       |   6
   C     |    500     |        120           |        12          |       3       |   3

我一直试图通过创建两个 DataFrame 来以不同的方式解决这个问题;一个用于手段,一个用于计数,但无法将它们合并到一个 DataFrame 中。试过系列,试过加入,试过追加,试过......

【问题讨论】:

    标签: python pandas count mean pandas-groupby


    【解决方案1】:

    一个简单的选择是在原始数据集中添加一列 1(我们称之为“计数”),然后在该列上求和:

    df['count'] = 1
    aggregator = {'rent' : 'mean',
                  'size house, m2' : 'mean',
                  'price per m2': 'mean',
                  'deposit' : 'mean',
                  'count': 'sum'}
    madrid_rooms_district = df.groupby('district', as_index=False)['rent','size house, m2', 'price per m2', 'deposit'].agg(aggregator)
    

    【讨论】:

    • 太棒了!奇迹般有效。谢谢。
    • @LucSpan 非常好用。如果您对它感到满意,请将其标记为答案:)
    • 您可以通过使用“大小”来获取聚合器中的计数来避免添加列。例如。 tips.groupby('day').agg({'tip': np.mean, 'day': np.size})
    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多