如何基于WHY_DELAY列条件,按OP_CARRIER统计延误航班数量
按航空公司统计延误航班数量的解决方案
数据详情
以下是迈阿密国际机场的航班数据:
| OP_CARRIER | WHY_DELAY |
|---|---|
| WN | WEATHER |
| DL | 0 |
| AA | CARRIER |
- 每行代表一班飞往迈阿密国际机场的航班
WHY_DELAY列记录延误原因,值为0表示航班准点
需求目标
按OP_CARRIER(航空公司)统计延误航班的数量。
当前尝试代码
df.loc[(df['WHY_DELAY']!= 0)].groupby('OP_CARRIER').value_counts()
问题修正与优化方案
当前代码的问题是groupby('OP_CARRIER')后调用value_counts()会对所有列进行计数,无法直接得到各航空公司的延误航班总数。推荐以下几种简洁有效的写法:
方法1:筛选后分组计数
df[df['WHY_DELAY'] != 0].groupby('OP_CARRIER').size()
方法2:直接统计筛选后的航空公司频次
df[df['WHY_DELAY'] != 0]['OP_CARRIER'].value_counts()
方法3:标记延误状态后求和
# 新增延误状态列,延误为True(即1),准点为False(即0) df['is_delayed'] = df['WHY_DELAY'] != 0 # 按航空公司分组求和得到延误数量 df.groupby('OP_CARRIER')['is_delayed'].sum()
以上三种方法都能得到正确结果:WN、AA各有1班延误航班,DL无延误。
内容的提问来源于stack exchange,提问作者Fernando Araiza
相关产品推荐
相关产品推荐

