如何在Python中将周度DataFrame拆分为日度并合并均值数据
解决方案
步骤1:统一日期格式
先确保两个DataFrame的日期列转换为datetime类型,这是后续日期处理的基础:
import pandas as pd # 转换dataframe_1的日度日期列 dataframe_1['date'] = pd.to_datetime(dataframe_1['date']) # 转换dataframe_2的周度日期列(假设列名为week_date,代表周起始/结束日) dataframe_2['week_date'] = pd.to_datetime(dataframe_2['week_date'])
步骤2:将周度数据拆分为日度
为每条周度记录生成对应的7天日期序列,拆分后将周均值cinema_generals直接填充到每一天:
# 为每周生成连续7天的日期序列 dataframe_2['daily_dates'] = dataframe_2['week_date'].apply( lambda x: pd.date_range(start=x, periods=7, freq='D') ) # 拆分日期序列为单独行,并重命名日期列 daily_df2 = dataframe_2.explode('daily_dates').rename(columns={'daily_dates': 'date'}) # 移除原周度日期列(可选操作) daily_df2 = daily_df2.drop('week_date', axis=1)
步骤3:合并到日度DataFrame
通过日期(若存在影院ID等分组维度则同时匹配该维度)将拆分后的周度数据合并到dataframe_1:
# 基础版:仅按日期合并 merged_df = pd.merge( dataframe_1, daily_df2[['date', 'cinema_generals']], on='date', how='left' # 保留dataframe_1所有日度记录 ) # 带分组维度版(如存在cinema_id) merged_df = pd.merge( dataframe_1, daily_df2[['cinema_id', 'date', 'cinema_generals']], on=['cinema_id', 'date'], how='left' )
关键注意事项
- 周起始日验证:确认
dataframe_2中week_date的定义(如周一/周日作为周起始),若需调整日期范围,可修改pd.date_range的start参数(例如start=x - pd.Timedelta(days=6)表示以week_date为周日,生成周一到周日的序列) - 缺失值处理:若
dataframe_1存在daily_df2未覆盖的日期,合并后cinema_generals会出现NaN,可根据业务需求用ffill()/bfill()或固定值填充 - 分组维度一致性:若数据按影院、区域等维度分组,需确保拆分和合并时同步匹配这些维度,避免数据错位
内容的提问来源于stack exchange,提问作者Simon Lim
相关产品推荐
相关产品推荐

