如何使用Python Pandas将分周期年度数据合并为完整年度数据?
用Pandas合并季度周期数据为年度数据
核心思路
你的数据集按季度拆分(JAN THRU MAR这类周期),要得到完整年度数据,核心是按Year列分组,对其他特征列进行聚合计算。如果需要处理日期范围,先修正你现有代码的问题,再结合分组逻辑实现。
修正你的代码问题
你当前代码存在两个明显问题:
split('THRU')后得到的月份字符串带空格,需要用strip()去除前后空白- 变量名错误:
start_month/end_month应为start_mo/end_mo
修正后的日期处理函数示例:
import pandas as pd months = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'] def process_period(row): period = row['Period'].strip() year = row['Year'] # 拆分并清理月份字符串 start_mo, end_mo = [mo.strip() for mo in period.split('THRU')] # 转换为年度的起始/结束日期(直接取全年范围) annual_start = pd.to_datetime(f'{year}-01-01') annual_end = pd.to_datetime(f'{year}-12-31') return pd.Series([annual_start, annual_end], index=['Annual_Start', 'Annual_End']) # 给原数据添加年度日期列 df[['Annual_Start', 'Annual_End']] = df.apply(process_period, axis=1)
合并为年度数据的完整实现
根据你的特征列类型选择对应聚合方式:
- 数值型特征:用
sum/mean/max等聚合函数 - 类别型特征:用
', '.join合并所有周期,或mode()取众数
示例代码:
# 按Year分组聚合,替换为你的实际特征列 annual_df = df.groupby('Year').agg( # 数值列示例:求和、取平均 Revenue='sum', Average_Users='mean', # 周期列:合并所有季度描述 Periods=('Period', ', '.join), # 日期列:取该年度的起始/结束日期 Annual_Start=('Annual_Start', 'first'), Annual_End=('Annual_End', 'first') ).reset_index() # 查看结果 print(annual_df)
简化版(无需日期处理)
如果不需要日期范围,直接分组聚合即可:
annual_df = df.groupby('Year').agg({ 'Feature1': 'sum', 'Feature2': 'mean', 'Period': lambda x: ', '.join(x) }).reset_index()
内容的提问来源于stack exchange,提问作者Marta Fuentes
相关产品推荐
相关产品推荐

