You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于含Yes/No列的房价数据集构建Pandas透视表及分析咨询

问题解决与分析建议

一、修正透视表代码,实现批量groupby求均值

你原来的代码参数逻辑错误,index=['yes','no']不是合法设置——这是列的取值,而非数据中的列名。要实现批量对每个二元列求yes/no对应的平均房价,有两种简洁可行的方法:

方法1:循环合并每个groupby结果

import pandas as pd

# 定义需要分析的二元列列表
target_cols = ['mainroad', 'guestroom', 'basement', 'hotwaterheating', 'airconditioning', 'prefarea']
result_list = []

for col in target_cols:
    # 对单个列分组求平均房价,重置索引并重命名列
    group_result = df.groupby(col)['price'].mean().reset_index()
    group_result.rename(columns={col: 'status', 'price': f'avg_price_{col}'}, inplace=True)
    result_list.append(group_result)

# 以status(yes/no)为键合并所有结果
pivot_table = pd.merge(result_list[0], result_list[1:], on='status', how='outer')

方法2:转成长格式后做透视表(更简洁)

# 将目标列与price字段转成长格式
melted_df = df.melt(id_vars=['price'], value_vars=target_cols, var_name='feature', value_name='status')
# 生成透视表:行是yes/no状态,列是特征名称,单元格是对应平均房价
pivot_table = melted_df.pivot_table(index='status', columns='feature', values='price', aggfunc='mean')

第二种方法得到的结果完全符合需求:行取值为yes/no,列是各个二元特征,单元格为对应场景下的平均房价,等价于多次手动执行df.groupby(列名)['price'].mean()。

二、透视表+热图的有效性与实现

这种方法非常有效:二元特征的yes/no房价差异通过热图展示,能直观对比不同特征对房价的影响程度——颜色越深代表平均房价越高,可快速识别出对房价提升更显著的特征(比如空调、优选地段这类)。

实现步骤(基于seaborn库):

import seaborn as sns
import matplotlib.pyplot as plt

# 使用上面生成的pivot_table数据
plt.figure(figsize=(10, 4))
# 绘制热图,添加数值标注,调整颜色映射
sns.heatmap(pivot_table, annot=True, fmt='.2f', cmap='YlGnBu', cbar=True)
plt.title('Average Housing Price by Binary Features')
plt.xlabel('Features')
plt.ylabel('Status (Yes/No)')
plt.show()

运行后会生成一张清晰的热图,每个单元格标注具体平均房价,颜色深浅对应价格高低,特征对房价的影响差异一目了然。

内容的提问来源于stack exchange,提问作者jxqbbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:12:47