如何使用Pandas按连续月份拆分DataFrame?
解决方案
要实现按连续月份分组拆分DataFrame,你可以按照以下步骤操作:
1. 转换日期列类型并确保数据按时间排序
首先将Month列转换为datetime类型,方便后续计算时间差;同时确保数据是按时间顺序排列的:
import pandas as pd # 转换Month列为datetime类型 df['Month'] = pd.to_datetime(df['Month'], format='%m/%d/%Y') # 按Month列排序(如果原始数据未排序) df = df.sort_values('Month').reset_index(drop=True)
2. 生成连续月份分组标识
计算每行与前一行的月份间隔,当间隔不等于1个月时,标记为新分组的起点,最终通过累加生成分组ID:
# 计算当前月份与前一行月份的间隔(单位:月) df['month_gap'] = (df['Month'].dt.year - df['Month'].shift(1).dt.year) * 12 + (df['Month'].dt.month - df['Month'].shift(1).dt.month) # 当间隔不等于1时,标记为新分组,累加得到group_id df['group_id'] = (df['month_gap'] != 1).cumsum()
3. 按分组ID拆分DataFrame
通过groupby按group_id分组,即可得到两个连续月份的数据集:
# 拆分得到分组后的DataFrame列表 grouped_dfs = [group for _, group in df.groupby('group_id')] # 提取2020年和2021年的两组数据(可按需删除辅助列) df_2020 = grouped_dfs[0].drop(columns=['month_gap', 'group_id']) df_2021 = grouped_dfs[1].drop(columns=['month_gap', 'group_id'])
说明
- 转换日期类型是核心前提,确保能准确计算月份间隔;
- 计算月份间隔时,通过年份差和月份差结合的方式,避免了仅用天数计算的误差(不同月份天数不同);
- 这种方法具有通用性,即使后续出现更多不连续的月份段,也能自动拆分出对应的分组。
内容的提问来源于stack exchange,提问作者JungleDiff
相关产品推荐
相关产品推荐

