You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中复制行并逐日递增date列

实现方法

核心思路

利用pandas的apply生成每行对应的日期序列列表,再通过explode将列表拆分为多行,自动保留其他列的重复值,无需手动循环拼接。

代码实现

1. 导入依赖库

import pandas as pd
from pandas.tseries.offsets import DateOffset

2. 准备原始数据(替换为你的真实DataFrame)

# 模拟12行的示例数据
data = {
    'date': pd.date_range('2023-01-01', periods=12, freq='M'),
    'Video_ID': [f'vid_{i}' for i in range(12)],
    'ratio_liked': [0.8 + i*0.01 for i in range(12)],
    'accomulated_views': [1000 + i*500 for i in range(12)]
}
df = pd.DataFrame(data)

3. 生成展开后的DataFrame

# 定义生成日期序列的函数
def generate_dates(row):
    start_date = row['date']
    end_date = start_date + DateOffset(months=1)
    # 生成从start_date到end_date前一天的逐日日期(确保仅包含当月约30天数据)
    return pd.date_range(start_date, end_date - pd.Timedelta(days=1), freq='d').tolist()

# 替换date列为日期列表,再拆分为多行
df_expanded = df.assign(date=df.apply(generate_dates, axis=1)).explode('date', ignore_index=True)

4. 验证结果

查看某一视频的展开数据:

print(df_expanded[df_expanded['Video_ID'] == 'vid_0'])

关键点说明

  • apply(..., axis=1):逐行处理原始数据,为每行生成对应月份的逐日日期列表
  • explode('date'):将列表格式的date列拆分为独立行,其他列的数值自动重复匹配
  • 日期边界处理:通过end_date - pd.Timedelta(days=1)避免包含下月初的日期,保证每行生成约30条数据

内容的提问来源于stack exchange,提问作者Floralys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:55:16