如何在Python中扩展数据集日期?现有代码失效求助
解决日期连续展开的问题
问题分析
你的原代码没法实现需求,核心原因是resample('1D')需要分组内的日期索引本身具备连续时间区间的基础,但你的数据是离散的日期点,没法直接通过resample生成中间缺失的日期。正确思路是给每个Line+Style No组合,生成从该组最早日期到最晚日期的连续每日序列。
完整代码实现
import pandas as pd # 构造原始数据集 data = { 'Line': ['G01', 'G01', 'G01', 'G01'], 'Style No': ['DDS23-00648-1101(BR)', 'RG322F2633', 'RG322F2633', 'RG322F2633'], 'Loading date': ['05/08/2024', '09/08/2024', '17/08/2024', '24/08/2024'] } df1 = pd.DataFrame(data) # 步骤1:将日期列转为datetime类型(指定日/月/年格式,避免识别错误) df1['Loading date'] = pd.to_datetime(df1['Loading date'], format='%d/%m/%Y') # 步骤2:分组生成连续日期 def expand_dates(group): # 生成组内从最早到最晚的每日日期序列 date_range = pd.date_range(start=group['Loading date'].min(), end=group['Loading date'].max(), freq='D') # 复用当前组的Line和Style No,匹配每个日期 return pd.DataFrame({ 'Line': group['Line'].iloc[0], 'Style No': group['Style No'].iloc[0], 'Loading_date': date_range }) # 应用分组逻辑并合并结果 result = df1.groupby(['Line', 'Style No'], group_keys=False).apply(expand_dates).reset_index(drop=True) # 步骤3:将日期转回原字符串格式(日/月/年) result['Loading_date'] = result['Loading_date'].dt.strftime('%d/%m/%Y') print(result)
代码说明
- 转日期类型:必须先把字符串日期转为datetime格式,这是生成连续序列的前提,指定
format='%d/%m/%Y'是适配你的日/月/年日期格式,防止pandas识别出错。 - 分组生成序列:自定义函数
expand_dates针对每个分组生成连续日期,同时复用该组的Line和Style No值,确保日期与对应字段匹配。 - 合并与格式化:通过
groupby.apply合并所有分组的结果,最后重置索引、转回原日期字符串格式,即可得到你需要的输出。
内容的提问来源于stack exchange,提问作者Đức Hoàng Nguyễn
相关产品推荐
相关产品推荐

