时间序列分析:如何将DataFrame数据按月分组实现分月查看分析
Pandas DataFrame按月份分组实现方法
前置准备
首先确保DataFrame中的日期列已转换为datetime类型:
import pandas as pd # 转换Date列为datetime格式 df['Date'] = pd.to_datetime(df['Date'])
常用实现方案
方案1:按月份生成分组对象(适合批量处理所有月份数据)
- 仅按月份分组(不同年份的同月份数据会合并到同一组):
# 生成按月份分组的对象 month_groups = df.groupby(df['Date'].dt.month) # 提取1月份的所有数据生成单独DataFrame jan_df = month_groups.get_group(1)
- 按年月分组(不同年份的同月份分为不同组,更常用):
# 生成按年月分组的对象 year_month_groups = df.groupby(df['Date'].dt.to_period('M')) # 提取2005年1月的单独DataFrame jan_2005_df = year_month_groups.get_group('2005-01')
- 遍历所有分组做批量分析示例:
for month, month_df in year_month_groups: # month为年月标识,month_df为对应月份的独立DataFrame print(f"月份:{month},数据条数:{len(month_df)}") # 此处填入单月数据的分析逻辑
方案2:直接筛选单月数据(适合临时提取某几个月份)
不需要生成分组对象,直接用布尔索引筛选:
- 提取所有年份1月的数据:
jan_df = df[df['Date'].dt.month == 1]
- 提取指定年份指定月份的数据:
target_df = df[(df['Date'].dt.year == 2005) & (df['Date'].dt.month == 1)]
可选扩展
如果你需要结合日期和时间两列生成完整时间戳再分组,可以先合并两列:
df['full_datetime'] = pd.to_datetime(df['Date'].astype(str) + ' ' + df['Time']) # 后续用full_datetime列做上述分组/筛选操作即可
内容的提问来源于stack exchange,提问作者Loai Alnouri
相关产品推荐
相关产品推荐

