如何使用Pandas的groupby/Grouper按月份分组(忽略年份)
按月份分组Pandas DataFrame(忽略年份)
嗨,这个需求其实很容易实现,核心是提取日期列的月份信息作为分组依据,同时忽略年份。下面给你几种用Pandas的groupby/Grouper实现的方法:
第一步:确保日期列是datetime类型
首先要确认你的Departure_Date和Arrival_Date列已经是datetime格式,如果还不是的话,先做转换:
import pandas as pd # 读取你的分号分隔数据 df = pd.read_csv('your_data.csv', sep=';') # 将日期列转换为datetime类型 df['Departure_Date'] = pd.to_datetime(df['Departure_Date']) df['Arrival_Date'] = pd.to_datetime(df['Arrival_Date'])
方法一:直接用dt.month作为分组键
这是最直观的方式,通过dt.month提取日期列的月份(返回1-12的整数),然后传入groupby:
# 按出发日期的月份分组(忽略年份) grouped_by_dep_month = df.groupby(df['Departure_Date'].dt.month) # 如果需要按到达日期的月份分组,同理: # grouped_by_arr_month = df.groupby(df['Arrival_Date'].dt.month)
方法二:使用pd.Grouper配合月份提取
如果你更倾向于用Grouper语法,可以通过func参数指定提取月份的逻辑:
# 使用Grouper按出发日期的月份分组 grouped_by_month = df.groupby(pd.Grouper(key='Departure_Date', func=lambda x: x.month))
方法三:先创建月份列再分组
如果需要后续复用月份信息,可以先新增一个Month列,再按这个列分组:
# 新增月份列(1-12) df['Departure_Month'] = df['Departure_Date'].dt.month # 按新增的月份列分组 grouped_by_month = df.groupby('Departure_Month')
示例:分组后统计数据
分组完成后,你可以执行各种聚合操作,比如统计每个月份的航班数量:
# 统计每个月份的航班总数 monthly_flight_count = grouped_by_month.size() print(monthly_flight_count) # 或者统计每个月份的平均出发时间(示例) monthly_avg_dep_time = grouped_by_month['Departure_Time'].mean()
这样所有不同年份的同一月份都会被分到同一组,完美满足你忽略年份的需求~
内容的提问来源于stack exchange,提问作者Brilsmurfffje
相关产品推荐
相关产品推荐

