【问题标题】:Compute mean if two conditions are met如果满足两个条件,计算均值
【发布时间】:2017-10-06 09:17:41
【问题描述】:

设置

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

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

数据框df 看起来像,

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

问题

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

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

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 包含所有可能的地区。

有什么建议吗?

我想获取下表,

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

【问题讨论】:

  • 使用 groupby 和聚合均值

标签: python pandas conditional mean


【解决方案1】:

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

【讨论】:

  • 谢谢马丁的回答。但是,这对表格的排序方式与我想要的不同(请参阅问题)。
  • 啊,我错过了那部分。只需添加 unstack() 即可将 MultiIndex 转换为列。
  • 天才。谢谢!
【解决方案2】:

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

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

【讨论】:

  • 感谢詹姆斯的回答。但是,这对表格的排序方式与我想要的不同(请参阅问题)。
猜你喜欢
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
相关资源
最近更新 更多