Pandas groupby意味着多列和计数单列

时间:2017-03-15 17:59:18

标签: python pandas count mean pandas-groupby

我正在使用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'区域。这就是我需要的。

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

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

E.g。我有,

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中。试过系列,尝试加入,尝试追加,试过......

1 个答案:

答案 0 :(得分:1)

一个简单的选项是在原始数据集中添加一列1(让我们称之为“count”),然后对此列求和:

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)