如何调整航班起飞时间统计图表的小时排序并合并0与24小时数据?
航班小时统计排序与合并解决方案
核心思路
先把24小时的记录合并到0小时,再强制指定小时的排序顺序,确保图表按0-23的顺序展示。
1. 处理小时字段,合并0与24时段
从DepTime提取小时部分,将24替换为0,完成同一时段的合并:
# 提取起飞小时 data['DepHour'] = data['DepTime'].floordiv(100) # 将24小时合并到0小时 data['DepHour'] = data['DepHour'].replace(24, 0)
2. 固定小时的排序顺序
用pandas的分类类型强制指定小时顺序为0到23,后续统计和绘图都会遵循这个顺序:
import pandas as pd # 设置小时为分类类型,指定0-23的顺序 data['DepHour'] = pd.Categorical(data['DepHour'], categories=range(24), ordered=True)
3. 统计并绘制有序柱状图
用value_counts(sort=False)按分类顺序统计,再生成柱状图:
import matplotlib.pyplot as plt # 按指定顺序统计各小时航班数 hour_counts = data['DepHour'].value_counts(sort=False) # 绘制柱状图 hour_counts.plot(kind='bar') plt.xlabel('起飞小时') plt.ylabel('航班数量') plt.title('全天各时段航班数量分布') plt.show()
完整代码示例
import pandas as pd import matplotlib.pyplot as plt # 假设data是你的航班数据集 # 处理小时字段 data['DepHour'] = data['DepTime'].floordiv(100) data['DepHour'] = data['DepHour'].replace(24, 0) # 固定小时排序顺序 data['DepHour'] = pd.Categorical(data['DepHour'], categories=list(range(24)), ordered=True) # 统计并绘图 hour_counts = data['DepHour'].value_counts(sort=False) hour_counts.plot(kind='bar') plt.xlabel('起飞小时') plt.ylabel('航班数量') plt.title('全天各时段航班数量分布') plt.show()
关键说明
replace(24, 0)直接完成0和24小时的统计合并,逻辑简单直接pd.Categorical是确保排序正确的核心,避免value_counts默认按计数排序的问题sort=False参数让统计结果严格遵循分类的预设顺序,保证图表x轴按0-23升序排列
内容的提问来源于stack exchange,提问作者Toshik
相关产品推荐
相关产品推荐

