如何在Pandas中将周粒度数据集展开生成每日粒度数据集
实现方法
核心思路是先将日期类字段转为Pandas可识别的 datetime 格式,为每一行生成对应周的连续日期序列,再将序列展开为多行,其余字段会自动匹配复制到对应行。
完整可运行代码
import pandas as pd # 原始数据集 df = pd.DataFrame({ 'weekstart':['01-Jan-18','08-Jan-18','15-Jan-18','22-Jan-18'], 'weekend':['07-Jan-18','14-Jan-18','21-Jan-18','28-Jan-18'], 'Spend':[34235.922,37359.6048,38916.1164,36903.8628], 'Daily':[4890.846,5337.086,5559.445,5271.98], }) # 步骤1:把周起始日期转为datetime格式 df['weekstart'] = pd.to_datetime(df['weekstart']) # 步骤2:为每一行生成对应周的7天连续日期序列 df['date'] = df['weekstart'].apply(lambda x: pd.date_range(start=x, periods=7, freq='D')) # 步骤3:把日期序列展开为多行,得到最终结果 result = df.explode('date', ignore_index=True) # 可选:如果需要把日期格式转回「01-Jan-18」这类字符串格式,可加下面这行 # result['date'] = result['date'].dt.strftime('%d-%b-%y')
如果你的数据集存在周长度不固定的情况,也可以基于周起止日期生成日期序列,把步骤2替换为如下代码即可:
df['weekend'] = pd.to_datetime(df['weekend']) df['date'] = df.apply(lambda row: pd.date_range(start=row['weekstart'], end=row['weekend'], freq='D'), axis=1)
运行得到的result就是按日展开的目标数据集,完全符合预期效果。
内容的提问来源于stack exchange,提问作者Himansu Odedra
相关产品推荐
相关产品推荐

