如何用Pandas按评分区间与房型分组统计数量?
解决方案
步骤1:划分评分区间
先将评分字段映射到你已定义的区间中,确保所有数据都能匹配对应区间:
import pandas as pd # 复用你已使用的评分区间边界 bins = [19.92, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0] # 给区间设置可读标签(可选,不影响统计逻辑) labels = ["(19.92, 30.0]", "(30.0, 40.0]", "(40.0, 50.0]", "(50.0, 60.0]", "(60.0, 70.0]", "(70.0, 80.0]", "(80.0, 90.0]", "(90.0, 100.0]"] # 新增列存储每条数据对应的评分区间 df['rating_bin'] = pd.cut(df['review_scores_rating'], bins=bins, labels=labels, include_lowest=True)
步骤2:双维度分组统计
同时按评分区间和房型分组,统计每个组合的数量:
# 按评分区间+房型分组,统计每组的记录数 grouped_data = df.groupby(['rating_bin', 'room_type']).size().reset_index(name='count')
步骤3:转换为目标格式
通过unstack将房型从行维度转为列维度,并用fillna(0)填充空值(表示该区间下对应房型无数据):
# 转换结构并处理空值 result_df = grouped_data.set_index('rating_bin').unstack('room_type').fillna(0) # 清理多层列名,让结果更简洁 result_df.columns = result_df.columns.droplevel(0)
最终结果示例
运行后会得到符合需求的DataFrame,结构如下:
| rating_bin | Entire home/apt | Hotel room | Private room | Shared room |
|---|---|---|---|---|
| (19.92, 30.0] | 10 | 2 | 12 | 0 |
| (30.0, 40.0] | 8 | 1 | 14 | 0 |
| ... | ... | ... | ... | ... |
| (90.0, 100.0] | 10500 | 85 | 2188 | 40 |
补充说明
- 如果你的原始数据已存在评分区间列,可直接跳过步骤1,用该列参与分组。
fillna(0)是为了保证所有区间-房型组合都有数值,避免空值干扰后续分析。
内容的提问来源于stack exchange,提问作者Tomas Rodriguez
相关产品推荐
相关产品推荐

