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)
我正在使用 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)