处理object类型Floor列:划分楼层类别并验证租金相关性
楼层分类与租金相关性验证方案
问题背景
现有一份租房数据集,需将Floor列(格式为当前楼层/总楼层)划分为「Ground Floor」「Mid Floor」「Top Floor」三类,进而验证楼层与租金的关联。此前的分类代码存在语法错误,无法正常运行。
数据集示例:
Adress Rooms m2 Price Floor 196 Skanstes 29a 5 325 2800 24/24 12 Ausekļa 4 5 195 2660 7/7 7 Antonijas 17A 3 86 2200 6/6 31 Blaumaņa 16 4 136 1800 4/6 186 Rūpniecības 21k2 5 160 1700 7/7 233 Vesetas 24 4 133 1700 10/10 187 Rūpniecības 34 5 157 1600 3/6 91 Elizabetes 31а 8 203 1600 1/5 35 Blaumaņa 9 3 90 1600 3/5 60 Cēsu 9 3 133 1550 6/7
字段类型:
Adress object Rooms int64 m2 int64 Price int64 Floor object dtype: object
解决方案
1. 修复楼层分类逻辑
原代码存在语法错误(return使用不当、条件分支格式错误),且未将字符串楼层转为整数,可能导致判断异常。以下是修正后的分类实现:
首先定义分类函数,通过整数比较确保逻辑准确:
def classify_floor(floor_str): # 拆分当前楼层与总楼层并转为整数 current_floor, total_floors = floor_str.split('/') current_floor = int(current_floor) total_floors = int(total_floors) # 分类判断 if current_floor == 1: return "Ground Floor" elif current_floor == total_floors: return "Top Floor" else: return "Mid Floor"
将函数应用到DataFrame,生成新的分类列:
# 保留原排序逻辑 df_sorted = df.sort_values("Price", ascending=False) # 添加楼层分类列 df_sorted['Floor_Category'] = df_sorted['Floor'].apply(classify_floor)
2. 验证楼层与租金的相关性
方式1:分组统计租金均值
通过分组计算不同楼层类别的平均租金,直观观察差异:
floor_rental_summary = df_sorted.groupby('Floor_Category')['Price'].agg( 平均租金='mean', 房源数量='count' ).reset_index() print(floor_rental_summary)
方式2:可视化租金分布
用箱线图展示不同楼层类别的租金分布:
import seaborn as sns import matplotlib.pyplot as plt sns.boxplot(x='Floor_Category', y='Price', data=df_sorted, order=['Ground Floor', 'Mid Floor', 'Top Floor']) plt.title('租金与楼层类别分布') plt.xlabel('楼层类别') plt.ylabel('租金') plt.show()
方式3:量化相关性计算
将楼层类别映射为数值,计算与租金的皮尔逊相关系数,量化关联程度:
# 类别转数值:Ground=1, Mid=2, Top=3 floor_mapping = {"Ground Floor": 1, "Mid Floor": 2, "Top Floor": 3} df_sorted['Floor_Score'] = df_sorted['Floor_Category'].map(floor_mapping) # 计算相关系数 correlation = df_sorted['Floor_Score'].corr(df_sorted['Price']) print(f"楼层类别与租金的相关系数:{correlation:.2f}")
原代码问题说明
- 语法错误:
return语句不能直接在循环中使用,且条件分支格式不符合Python语法(if ...:后不能直接跟return) - 类型问题:直接比较字符串形式的楼层号(如
parts[0]==parts[-1])虽能运行,但转为整数比较更严谨,避免特殊场景下的字符串匹配错误
内容的提问来源于stack exchange,提问作者Alise Valeiņa
相关产品推荐
相关产品推荐

