Python Pandas中同时计算分区平均速度与生成哑变量的方法求助
解决思路与代码实现
嗨,我来帮你搞定这个需求!你想要的其实是把聚合平均速度和类别存在性哑变量这两个操作结合起来,咱们一步步来实现:
首先要注意一个小细节:你原始DataFrame里代表区域的列是Road_Section,不是Zone,所以后续groupby的时候要对应上这个列名哦。
第一步:准备示例数据
先把你给出的DataFrame用代码构造出来,方便后续测试:
import pandas as pd data = { 'Road_Section': ['Zone1', 'Zone1', 'Zone1', 'Zone1', 'Zone1', 'Zone2', 'Zone2', 'Zone2'], 'RoadType': ['Local', 'National', 'Collector', 'National', 'Local', 'Local', 'Local', 'Collector'], 'Speed': [1.33, 0.37, 0.52, 1.17, 1.21, 0.52, 1.05, 2.48], 'Landuse': ['Shops', 'Field', 'Park', 'Resident', 'Office', 'Park', 'Shops', 'Shops'] } df = pd.DataFrame(data)
第二步:计算各区域平均速度
这部分和你之前的思路一致,只是修正了列名,同时保留两位小数并重命名列:
# 计算各区域平均速度,保留两位小数 avg_speed = df.groupby('Road_Section')['Speed'].mean().round(2).rename('Average_Speed')
第三步:生成RoadType的存在性哑变量
我们需要对每个区域,标记它包含哪些RoadType(有则为1,无则为0):
# 对每个区域的RoadType取唯一值,生成对应哑变量 roadtype_dummies = df.groupby('Road_Section')['RoadType'].apply( lambda x: pd.Series(1, index=x.unique()) # 对该区域的每个唯一RoadType赋值1 ).unstack(fill_value=0) # 把行转成列,缺失的类别填充0
第四步:生成Landuse的存在性哑变量
和RoadType的处理逻辑完全一致:
# 对每个区域的Landuse取唯一值,生成对应哑变量 landuse_dummies = df.groupby('Road_Section')['Landuse'].apply( lambda x: pd.Series(1, index=x.unique()) ).unstack(fill_value=0)
第五步:合并结果并调整格式
把上面三部分结果合并,再调整列顺序到你期望的输出格式:
# 合并所有数据 result = pd.concat([avg_speed, roadtype_dummies, landuse_dummies], axis=1) # 按照你想要的列顺序重新排列 desired_columns = ['Average_Speed', 'Local', 'National', 'Collector', 'Shops', 'Office', 'Resident', 'Park', 'Field'] result = result[desired_columns].reset_index().rename(columns={'Road_Section': 'Zone'})
最终输出
运行print(result)就能得到你想要的结果:
Zone Average_Speed Local National Collector Shops Office Resident Park Field 0 Zone1 0.92 1 1 1 1 1 1 1 1 1 Zone2 1.35 1 0 1 1 0 0 1 0
内容的提问来源于stack exchange,提问作者Arief Hidayat
相关产品推荐
相关产品推荐

