如果满足两个条件,计算均值

Compute mean if two conditions are met

设置

我正在使用 Scrapy 抓取房屋广告,随后使用 pandas 分析数据。

我使用 pandas 来计算几个住房特征的均值和中位数。

数据框 df 看起来像,

district | rent | rooms | …
----------------------------
 North   | 200  |   3   | …
 South   | 300  |   1   | …
 South   | 300  |   1   | …
   ⋮         ⋮       ⋮     ⋮

问题

我想计算每个地区 n 间公寓的平均租金。

我找到了一个答案 ,这让我很接近,例如

df.loc[df['rooms'] == 1, 'rent'].mean()

但这计算的是整个城市一居室公寓的平均租金。

要按地区进行,我想做类似的事情,

for d in district_set:
     df.loc[df['rooms'] == 1 and df['district'] == d, 'rent'].mean()

其中 district_set 包含所有可能的选区。

有什么建议吗?

我想获得以下table,

district | avg rent 1R | avg rent 2R | …
----------------------------------------
 North   |     200     |     400     | …
 South   |     300     |     500     | …
   ⋮            ⋮              ⋮

df.groupby(['district', 'rooms'])['rent'].mean().unstack() 应该可以。 unstack() 将先前表达式返回的 MultiIndex 转换为 table,其中 district 为行,rooms 为列。

您可以通过按地区和房间数量分组来折叠数据框,然后按照@bigbounty 的建议使用均值进行聚合。

df.groupby(['rooms', 'district'])['rent'].mean()