Pandas groupby 表示多列并计算单列

Pandas groupby mean mulitple columns and count single column

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

下面的命令,

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

产生一个 table 每行一个区,区的平均值为每列 'rent','size house, m2', 'price per m2','deposit'。这就是我需要的。

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

如何将 "counting" 列的数量从四列减少到一列?

例如我有,

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(我们称之为 "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)